2013-02-07 11 views
5

Bir tıbbi sözlüğü (.csv dosyası) ayrıştırmaya çalışıyorum ve daha sonra bu sözcükleri UITextChecker aracılığıyla öğrenmelisiniz: bu sözcük, yazım denetimcinin bu tıbbi terimleri geçerli kelimeler olarak onaylaması için.UITextChecker: Kelime Binlerce Öğrenme ile Bellek Sorunu

Bu yöntemi başka bir iş parçacığında arıyorum, ancak csv dosyasındaki sözcük miktarı yaklaşık 50 K'dir.

- (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]; 

} 

Ben Aletleri Zaman Profiler uygulanan ve problem ben döngü içinde kelime öğreniyorum doğrultusunda vereceğine işaret bulduk.

Uygulama, sözlüğü 5000 sözcük (yaklaşık) olana kadar yüklemeye ve sonra çöker.

Herhangi bir yardım için teşekkür ederiz.

Teşekkür

+4

Kesinlikle Apple'ın QA grubunun hiçbir şekilde beklenmediği şekillerde UITextChecker'ı test ediyorsunuz. 1) Ana (UI) dizisi yerine arka plan iş parçacığı kullanarak ve 2) bir seferde binlerce sözcük eklemeye çalışıyorsunuz. Başka birinden iyi bir yanıt alamıyorsanız, açıklayabildiğiniz kadar çok kodu (sorunu gösterir) paketlemenizi ve [http://bugreporter.apple.com] adresindeki bir hatayı dosyalamanızı öneririz. : //bugreporter.apple.com) kendilerine denemek için bu kodu göndererek. –

+0

Bir @autoreleasepool kullanın –

+1

Her yineleme için 2 NSStrings ve bir NSCharacterSet oluşturuyorsunuz. Önemli olup olmadığını görmek için uygulamanızı profilleyin. – jcm

cevap

1

bir arka plan iş parçacığı üzerinde UIKit sınıf yöntemleri deme - çöker bu olacak sonucu. Ayrıca, , yönteminizin içinde bir otomatikleştirme havuzu oluşturmalısınız, böylece herhangi bir nesneyi sızdırmazsınız. UITextChecker ana iş parçacığı üzerinde kullanıldığından, bir seferde yalnızca birkaç sözcük eklemenizi ve ardından uygulamayı durdurmadığınız için çalışma döngüsüne dönmenizi öneririm. Bu süreçte kullanıcıya bir çevirici göstererek, ne yaptığını biliyorlar.

0

sadece i = 0 değerini değiştirin. Bu size yardımcı olacaktır. Örneğin:

for (i=0; i<[csvContent count]; i++) 
İlgili konular