我正在尝试解析一个医学词典(.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];
}我应用了Instruments Time Profiler,发现问题出在我在循环中学习word的那一行。
这个应用程序试图加载字典直到5000个单词(大约),然后崩溃。
任何帮助都将不胜感激。
谢谢
发布于 2013-06-19 14:40:40
您不能在后台线程上调用UIKit类方法--此将导致崩溃。此外,您必须在您的方法内创建一个自动释放池,这样您就不会泄漏任何对象。由于UITextChecker必须在主线程上使用,我建议您一次只添加几个单词,然后返回run循环,这样您就不会使应用程序停滞。在这个过程中向用户显示一个微调器,以便他们知道它在做什么。
发布于 2013-06-19 15:18:57
只需更改i= 0的值。这会对你有帮助。例如:
for (i=0; i<[csvContent count]; i++)https://stackoverflow.com/questions/14746992
复制相似问题