【问题标题】:Memory issue in iOS Keyboard ExtensioniOS 键盘扩展中的内存问题
【发布时间】: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 解决方案所做的所有事情。

标签: ios swift memory keyboard


【解决方案1】:

您可以将这个大文件分成两个或更多。例如,如果您需要搜索这些文件,您可以交替加载这些文件。

此外,如果它是按字母顺序排序的,那么您可以将其拆分为以下字母:dictionary-A-H.plistdictionary-I-Z.plist

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 2018-05-30
    • 2017-10-31
    • 1970-01-01
    • 2016-02-05
    相关资源
    最近更新 更多