Sto cercando di analizzare un dizionario medico (file .csv) e quindi imparare tutte quelle parole tramite il metodo UITextChecker
: learnword in modo che il correttore ortografico approvi quei termini medici come parole valide.UITextChecker: problema di memoria con l'apprendimento di migliaia di parole
Sto chiamando questo metodo in un altro thread ma la quantità di parole nel file csv è di circa 50 K.
- (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];
}
ho applicato Instruments Tempo Profiler e ha scoperto che il problema sta nella linea in cui sto imparando parola all'interno del ciclo.
L'app tenta di caricare il dizionario fino a 5000 parole (circa) e quindi si blocca.
Qualsiasi aiuto sarebbe apprezzato.
Grazie
Sei sicuramente stress testing UITextChecker in modi gruppo QA di Apple probabilmente mai previsto. Sei 1) usandolo in un thread in background invece del thread principale (UI) e 2) stai cercando di aggiungere migliaia di parole alla volta. Se non ottieni una risposta decente da qualcun altro, ti consiglio di impacchettare tutto il codice che puoi rivelare (che dimostra il problema) e di segnalare un errore su [http://bugreporter.apple.com] (http : //bugreporter.apple.com) inviando loro quel codice per provarlo da soli. –
Utilizzare un @autoreleasepool –
Si stanno creando 2 NSStrings e un NSCharacterSet per ogni iterazione. Profili la tua app per vedere se è significativa. – jcm