n.b*_*y.n 5 csv iphone memory-management ios
我正在尝试解析医学字典(.csv文件),然后通过UITextChecker:learnword方法学习所有这些单词,以便拼写检查程序将这些医学术语批准为有效单词.
我在另一个线程中调用此方法,但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];
}
Run Code Online (Sandbox Code Playgroud)
我已经应用了仪器时间分析器,发现问题出在我在循环中学习单词的行.
该应用程序尝试加载字典直到5000字(约)然后崩溃.
任何帮助,将不胜感激.
谢谢
小智 1
您不能在后台线程上调用 UIKit 类方法——这会导致崩溃。此外,您必须在方法内创建一个自动释放池,以免泄漏任何对象。由于 UITextChecker 必须在主线程上使用,因此我建议一次仅添加几个单词,然后返回到运行循环,这样您就不会停止应用程序。在此过程中向用户显示一个旋转器,以便他们知道它在做什么。