UITextChecker:学习成千上万字的记忆问题

时间:2013-02-07 08:47:41

标签: iphone ios memory-management csv

我正在尝试解析医学字典(.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];

}

我已应用了仪器时间分析器,发现问题出在我在循环中学习单词的行。

该应用尝试将字典加载到5000字(大约),然后崩溃。

任何帮助都将不胜感激。

由于

2 个答案:

答案 0 :(得分:1)

您不能在后台线程上调用UIKit类方法 - 此导致崩溃。此外,您必须在方法内创建自动释放池,以便您不会泄漏任何对象。由于必须在主线程上使用UITextChecker,我建议一次只添加几个单词,然后返回到运行循环,这样就不会拖延应用程序。在此过程中向用户显示微调器,以便他们知道它在做什么。

答案 1 :(得分:0)

只需更改i = 0的值。这将对您有所帮助。 例如:

for (i=0; i<[csvContent count]; i++)