iOS 键盘扩展以 "per-process-limit"终止

标签 ios objective-c ios8 iphone-6 ios-keyboard-extension

我正在尝试为 iOS 8 开发一个键盘扩展。除了我遇到的各种问题(这表明扩展只是事后的想法),在开始在 iPhone 6 上测试后,我发现扩展会随机终止,崩溃日志中包含如下条目:

 Name       |            <UUID>                |     CPU Time|     rpages|       purgeable| recent_max| lifetime_max| fds |  [reason]         | (state)
 MyKeyboard <93dea1cc8757387ba5e7da3006a7d23f>         0.638       13072                0           -          8483   50  [per-process-limit]  (frontmost)

请注意,这种情况发生在 iPhone 6 和 iPhone 6 plus 上,但不会发生在功能较弱(RAM 较少,但不是 64 位)的 iPhone 4S 上。

当然,当您在设备上调试时不会发生这种情况。

此外,如果我运行与应用程序而不是扩展程序完全相同的代码,则不会发生这种情况。

终止似乎主要发生在使用 Quartz 绘制线条时,或者更容易地使用 Apple 的 CoreTextArcCocoa 类的派生类将属性字符串呈现为弧线时。 分析器显示,从来没有 CPU 使用情况,应用程序中的 RAM 使用情况为 15-25MB。当我使用其中几个弧 TextView (主要与属性字符串相关)时,会有很多分配/解除分配,所以我想也许快速分配(即使随后是解除分配)会触发一些 iOS 进程,该进程会终止扩展,因为担心占用太多内存?但是如果我不知道确切的触发器,如何围绕它进行编码呢?当然,我想不出一种方法来调试这个问题,因为它在我的应用程序之外。 我尝试使用我的一张开发者计划票证向 Apple 开具相关票证。我请求任何形式的帮助,甚至只是对“每个进程限制”的更好解释。他们关闭并退款但没有回复。我重新打开询问至少关闭第一张票的原因,他们关闭了该票并退款。 关于到底发生了什么或者我可以尝试什么有什么想法吗?

这里是来自同一崩溃日志的完整内存统计信息:

Free pages:                              9054
Active pages:                            122754
Inactive pages:                          48617
Speculative pages:                       235
Throttled pages:                         0
Purgeable pages:                         4696
Wired pages:                             67788
File-backed pages:                       81292
Anonymous pages:                         90314
Compressions:                            15775
Decompressions:                          3940
Compressor Size:                         1364
Uncompressed Pages in Compressor:        4383
Page Size:                               16384
Largest process:   backboardd

最佳答案

键盘扩展似乎存在未记录的内存限制。大约有40Mb。您的键盘占用了 rpages*4kb = 51Mb

关于iOS 键盘扩展以 "per-process-limit"终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27261571/

相关文章:

iphone - 不使用 Interface Builder 修改 Nib 文件

iOS:加载时 UIImage 的随机位置

ios - 对于 UIControlEvent 对象的 editingDidBegin 属性,术语 'session' 在外行术语中意味着什么?

ios - Adcolony 委托(delegate)没有被调用

iphone - 我应该如何存储核心数据 'selected' 项?

ios - 如何使用自定义键盘扩展 ios 8 的自动建议 View ?

objective-c - 在 UIWebview 中添加了空格 - 在 iOS7 和 iOS8 中删除了 UIWebView 空格

ios -::i-block-chrome css 技巧在 Mac 上不起作用

ios - 标签高度错误

objective-c - Windows 或 Linux 上的 Objective C