1

我创建了一个涉及使用字典的游戏。它有大约73000字。然而,在审查过程之后,该应用程序被拒绝了。以下是评测评论:

“我们发现您的应用在运行 iOS 6.1.3 的 iPad 上崩溃” “点击播放按钮时应用崩溃。” “如果你的应用程序使用了太多内存,它可能会遇到这个问题。”

我难住了。运行 6.1.3 的 iPhone 或运行 6.1.3 的 iPad 上的应用程序没有问题。所以我假设它在 iPad mini 上崩溃了。有没有更有效的方法/更好的地方将字典加载到内存中?这是按下播放按钮后我目前的操作方式。提前致谢!

    NSString *filePath = [[NSBundle mainBundle] pathForResource: [NSString stringWithFormat: @"dictionary"] ofType:@"txt"]; //set where to get the dictionary from
    NSData* data = [NSData dataWithContentsOfFile:filePath]; //pull the content from the file into memory
    NSString* string = [[[NSString alloc] initWithBytes:[data bytes]
                                                 length:[data length] 
                                               encoding:NSUTF8StringEncoding] autorelease];//convert the bytes from the file into a string
    NSString* delimiter = @"\n";//split the string around newline characters to create an array
    currentDict = [string componentsSeparatedByString:delimiter];
    [currentDict retain];
4

2 回答 2

1

在我看来,73,000 个单词似乎不会对记忆造成压力,而且可能完全是另外一回事。运行 Instruments,使用分配工具来监控你的内存发生了什么。确定是否真的是这本字典有问题。

也就是说,由于多种原因(包括您建议的原因),您使用的策略并不是很好。您可以使用许多替代方法来让您在任何给定时间获取您需要的字典部分,而不是您当前的方法,据我所知,它一直完全驻留在内存中。

一个简单的解决方案可能是转换为 NSDictionary 并从文件中加载它。另一个更复杂但更有效的解决方案是推出一个预先填充的 CoreData 数据库(例如,如果你在 github 上窥探,有许多现有的解决方案)。

于 2013-05-16T22:37:40.117 回答
0

这似乎是一种存储 70k 单词的异常缓慢且占用大量内存的方式。

我建议将整个字典存储在一个小的预加载 SQLite 数据库中,或者至少是一个二进制 plist 文件中——尽管数据库确实是一个更好的选择,因为您可以在所有内容都存储在内存中的情况下运行搜索。

于 2013-05-16T22:35:37.543 回答