Próbuję parsować słownik medyczny (plik .csv), a następnie nauczyć się wszystkich tych słów metodą UITextChecker
: learnword, aby sprawdzanie pisowni zatwierdzało te terminy medyczne jako prawidłowe słowa.UITextChecker: Problem z pamięcią z tysiącami słów
Wywołanie tej metody w innym wątku, ale ilość słów w pliku csv jest około 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];
}
Mam stosowane Instruments czas Profiler i okazało się, że problem leży w wierszu, w którym uczę słowo wewnątrz pętli.
Aplikacja próbuje załadować słownik do 5000 słów (w przybliżeniu), a następnie ulega awarii.
Każda pomoc zostanie doceniona.
Dzięki
Jesteś zdecydowanie podkreślić testowania UITextChecker w sposób grupa QA Apple prawdopodobnie nie spodziewał. Jesteś 1) używasz go w wątku w tle zamiast wątku głównego (UI) i 2) próbujesz dodać tysiące słów naraz. Jeśli nie otrzymasz przyzwoitej odpowiedzi od kogoś innego, polecam zapakowanie tak dużej ilości kodu, jaki możesz ujawnić (co pokazuje problem) i zgłoszenie błędu na stronie [http://bugreporter.apple.com] (http : //bugreporter.apple.com) wysyłając im ten kod, aby sam mógł go wypróbować. –
Użyj @autoreleasepool –
Tworzysz 2 NSStrings i NSCharacterSet dla każdej iteracji. Zapoznaj się z aplikacją, aby sprawdzić, czy jest ona znacząca. – jcm