2013-02-07 25 views
5

Tôi đang cố gắng phân tích từ điển y khoa (tệp .csv) và sau đó tìm hiểu tất cả các từ đó thông qua phương pháp từ khóa để kiểm tra chính tả chấp nhận các thuật ngữ y tế đó là từ hợp lệ.UITextChecker: Vấn đề bộ nhớ khi học hàng ngàn từ

Tôi đang gọi phương thức này trong một chuỗi khác nhưng số lượng từ trong tệp csv là khoảng 50K.

- (void)parseMyCSVFile{ 

for (int i = 1; i < [csvContent count]; i++) { 
    NSString *learntWord = [NSString stringWithFormat:@"%@",[csvContent objectAtIndex:i]]; 

    NSString *s = learntWord; 
    NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"()\n\""]; 
    s = [[s componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""]; 


    if ([UITextChecker hasLearnedWord:s]){ 

     NSLog(@"skipped"); 

    } 
    else 
    { 
     [UITextChecker learnWord:s]; // Memory Issue Here 
     NSLog(@"learning"); 
    } 

    HUD.detailsLabelText = [NSString stringWithFormat:@"%i of %i",i,[csvContent count]]; 
} 

[self performSelectorOnMainThread:@selector(bgWorkEnded) withObject:nil waitUntilDone:YES]; 

} 

Tôi đã áp dụng Công cụ định thời gian và phát hiện ra rằng vấn đề nằm trong dòng mà tôi đang học từ bên trong vòng lặp.

Ứng dụng cố gắng tải từ điển cho đến 5000 từ (xấp xỉ) và sau đó gặp sự cố.

Mọi trợ giúp sẽ được đánh giá cao.

Cảm ơn

+4

Bạn chắc chắn kiểm tra căng thẳng UITextChecker theo cách nhóm QA của Apple có thể không bao giờ mong đợi. Bạn đang 1) sử dụng nó trong một chủ đề nền thay vì chủ đề chính (UI) và 2) bạn đang cố gắng thêm hàng ngàn từ cùng một lúc. Nếu bạn không nhận được phản hồi tốt từ người khác, tôi khuyên bạn nên đóng gói nhiều mã như bạn có thể tiết lộ (thể hiện vấn đề này) và gửi một lỗi tại [http://bugreporter.apple.com] (http : //bugreporter.apple.com) gửi cho họ mã đó để tự mình dùng thử. –

+0

Sử dụng @autoreleasepool –

+1

Bạn đang tạo 2 NSStrings và một NSCharacterSet cho mỗi lần lặp lại. Hồ sơ ứng dụng của bạn để xem liệu đó có phải là đáng kể hay không. – jcm

Trả lời

1

Bạn không phải gọi phương thức lớp UIKit trên một sợi nền - đây sẽ kết quả trong tai nạn. Ngoài ra, bạn phải tạo một nhóm tự động trả lời bên trong phương thức của bạn để bạn không bị rò rỉ bất kỳ đối tượng nào. Vì UITextChecker phải được sử dụng trên chủ đề chính, tôi khuyên bạn chỉ nên thêm một vài từ cùng một lúc, sau đó quay lại vòng lặp chạy để bạn không dừng ứng dụng. Hiển thị một spinner cho người dùng trong quá trình này để họ biết những gì nó đang làm.

0

chỉ cần thay đổi giá trị của i = 0. Điều này sẽ giúp bạn. Ví dụ:

for (i=0; i<[csvContent count]; i++) 
Các vấn đề liên quan