XCode 4无法编译非常大的数组,以及有关NSArray/NSString开销的问题

Ada*_*dam 0 objective-c nsarray ios xcode4

我是Objective C和XCode的新手,目前正在开发我的第一款iPhone游戏.游戏必须对超过250,000个单词的拼字游戏字典做一些非常快速的拼写检查,理想情况下足够快,我可以在单个帧中检查100个字符串对单词列表.

我之前在C和actionscript 2中写过这个没有问题,只是使用标准的二进制搜索,但我不确定在Objective C中使用NSString和NSArray等选项实现它的最佳方法.

目前最大的问题是根本不会编译.如果我创建一个填充了NSStrings的NSArray,XCode只会挂起但不会崩溃.我把它编译了大约30分钟没有结果.我正在使用的代码:

words=[NSArray arrayWithObjects:@"aa", @"aah", ...250,000 words... @"zyzzyvas" ,nil];  
Run Code Online (Sandbox Code Playgroud)

当wordlist减少到几百个单词时,它编译并正常工作.

任何人都可以解释为什么会失败,或建议一个更好的方法来解决它?

接下来我要尝试的是将wordlist分成许多小块; 以第一个字母分隔,也许还有字母数,但这意味着要重新格式化大量文本文件以进行反复试验,这很可能会碰到同一个墙.

这个问题的另一部分是关于NSArray的速度和NSString的开销的一般查询,与旧式的char指针数组C风格相比.如果NSStrings甚至包含一些额外字节的头或函数指针或其他什么,在iPhone应用程序中制作25万个可能是错误的做法,对吧?

任何建议都将非常感谢.

Joh*_*ker 5

真的很想使用数据库 - 内置的SQLite是一个理想的解决方案.

也就是说,如果你有现有的C解决方案,那就没有理由你不能使用它了(毕竟你不必使用Cocoa类),尽管你需要考虑到iOS设备的限制,在内存利用率方面谨慎行事.