iphone - UITextChecker : Memory Issue With Learning Thousands Of Words

标签 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];

}

我应用了 Instruments Time Profiler,发现问题出在我在循环中学习单词的那一行。

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

如有任何帮助,我们将不胜感激。

谢谢

最佳答案

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

关于iphone - UITextChecker : Memory Issue With Learning Thousands Of Words,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14746992/

相关文章:

iphone - Float 不可转换为 CGFloat,CGFloat 不可转换为 Float

ios - 我如何检查 currentQueue 是主队列。?

ios - 在 iOS 上生成本地网页的缩略图

ios - 连接到邮件枪

iphone - <加速/加速.h> "file not found"

iphone - iPhone 上的流式 SAX XML 处理

iphone - NSString 的字节长度是多少?

c - 保存 PID 的全局数组。 Fork()、Unix 进程、C 编程

java - 强制 JVM 尽早收集垃圾并减少尽早使用的系统内存

c - 为什么我的指针数组返回一个 unicode 字符?