【问题标题】:UITextChecker: Memory Issue With Learning Thousands Of WordsUITextChecker:学习数千个单词的内存问题
【发布时间】:2013-01-22 17:01:07
【问题描述】:

我正在尝试解析医学词典(.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,发现问题出在我在循环内学习单词的那一行。

应用尝试加载字典直到 5000 个单词(大约)然后崩溃。

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 您肯定在以 Apple 的 QA 小组可能从未预料到的方式对 UITextChecker 进行压力测试。您是 1) 在后台线程而不是主 (UI) 线程中使用它,并且 2) 您尝试一次添加数千个单词。如果您没有从其他人那里得到体面的回应,我建议您打包尽可能多的代码(这表明了问题)并在http://bugreporter.apple.com 提交错误,将代码发送给他们自己尝试。
  • 使用@autoreleasepool
  • 您正在为每次迭代创建 2 个 NSStrings 和一个 NSCharacterSet。分析您的应用,看看这是否重要。
  • @MichaelDautermann 感谢您的回答。我也尝试在主线程中运行该应用程序,但它也崩溃了。尽管它几乎在 10K 字之后就崩溃了。另外,我在 bugreporter.apple.com 上提交了一个错误。让我们看看 Apple 何时回复我的问题 :)
  • @j_mcnally 我确实试过了,但用处不大。

标签: iphone ios memory-management csv


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多