【发布时间】:2016-10-21 14:34:20
【问题描述】:
我在 iOS 键盘扩展中使用以下代码。
var wordDictionary = NSMutableDictionary()
wordDictionary = NSMutableDictionary(contentsOfFile: NSBundle.mainBundle().pathForResource("dictionary", ofType: "plist")!)!
var wordDictionary1 = NSMutableDictionary()
wordDictionary1 = NSMutableDictionary(contentsOfFile: NSBundle.mainBundle().pathForResource("dictionary1", ofType: "plist")!)!
这里dictionary.plist的大小是3.5MB,dictionary1.plist的大小是44.8MB。
dictionary.plist 文件包含大约 10,000 个键/值对; dictionary1.plist 文件包括大约 200,000 个。
第二行完美运行。 在我看来,真正的 iPhone 设备的操作系统无法在键盘扩展中分配 30MB 以上的内存;或者更确切地说,键盘扩展不能使用 30MB 以上的内存。 但是第四行导致崩溃。日志说:
来自调试器的消息:由于内存问题而终止。程序以退出代码结束:0
我在 iPhone 6s 上对此进行了测试,并在 Mac OS Sierra 10.12 和 10.11.4 上使用 Xcode 版本 8.0 和 7.3。上面的代码在模拟器上完美运行。
如何避免这种崩溃?
【问题讨论】:
-
我想你可能已经回答了你自己的问题
In my opinion, OS of real iPhone device cannot alloc 30MB+ memory for keyboard extension。问题是键盘应该是快速和轻便的,如果键盘突然比应用程序使用更多的内存,你可能会发现它很慢并且没有人会使用它(这就是苹果增加内存限制的原因)。我建议您查看 CoreData 来存储您的所有数据,因为它只会加载到内存中需要的内容,而不是像您尝试使用 .plist 解决方案所做的所有事情。