私は医学辞書(.csvファイル)を解析してからUITextChecker
:learnwordメソッドを使ってそれらの単語をすべて学習し、スペルチェッカーがこれらの医学用語を有効な単語として承認します。UITextChecker:何千もの単語を学習したときのメモリの問題
私はこのメソッドを別のスレッドで呼び出していますが、csvファイル内の単語の量は約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];
}
私はInstruments Time Profilerを適用し、問題がループ内で単語を学習している行にあることを発見しました。
アプリは5000語(約)まで辞書を読み込み、クラッシュします。
ご協力いただければ幸いです。
おかげ
あなたは間違いなく、AppleのQAグループは、おそらく予想していなかった方法でUITextCheckerストレステストしています。 1)メイン(UI)スレッドの代わりにバックグラウンドスレッドで使用し、2)一度に何千もの単語を追加しようとしています。誰かからまともな返答が得られない場合は、公開することができるコードをパッケージ化して(問題を示す)、[http://bugreporter.apple.com](http ://bugreporter.apple.com)は、コードを送信して自分自身で試してみることができます。 –
@autoreleasepoolを使用する –
2つのNSStringとNSCharacterSetをすべての反復で作成しています。あなたのアプリをプロファイリングして、それが重要かどうかを確認してください。 – jcm