iOS自定义键盘扩展-内存限制

iOS自定义键盘扩展-内存限制,ios,objective-c,memory-management,keyboard,ios-extensions,Ios,Objective C,Memory Management,Keyboard,Ios Extensions,我正在开发一个自定义键盘,在其中我可笑地面临着内存问题。我做了各种仪器观察,得出结论,每次键盘出现和失效时,iOS都会保留内存。我对这种行为感到非常沮丧,因为在Dealoc中,尽管我的项目处于ARC中,但我已经发布了所有DMA 场景是这样的: 当我第一次启动键盘时,它会消耗大约30 MB的内存,经过一些操作后,它会增加到30 MB,然后我会使键盘失效。同样,当我在那一刻重新加载它时,它从30 MB开始,这是完全出乎意料的,由于这一点,在一些转换之后,内存压力和扩展崩溃。 如果有人能提出一些管理内

我正在开发一个自定义键盘,在其中我可笑地面临着内存问题。我做了各种仪器观察,得出结论,每次键盘出现和失效时,iOS都会保留内存。我对这种行为感到非常沮丧,因为在Dealoc中,尽管我的项目处于ARC中,但我已经发布了所有DMA

场景是这样的:

当我第一次启动键盘时,它会消耗大约30 MB的内存,经过一些操作后,它会增加到30 MB,然后我会使键盘失效。同样,当我在那一刻重新加载它时,它从30 MB开始,这是完全出乎意料的,由于这一点,在一些转换之后,内存压力和扩展崩溃。


如果有人能提出一些管理内存压力的建议,这将非常有帮助。

这里的简短回答是,您有内存泄漏

如果您正在用Swift编写扩展,请在视图控制器中为继承自
UIInputViewController
deinit
方法添加一个断点,并查看它是否被调用

如果你在Objective-C中编写应用程序,那么你可以在解构器中完成同样的操作

我也很挣扎,根据我的经验,在关闭键盘后,唯一会留下来的是一些核心数据。除此之外,如果所有对象都属于主视图控制器(
UIInputViewController
),则如果不再引用它们,它们将消失

如果在调用
deinit
后仍看到大量内存被使用,则其他地方存在泄漏。注意保持释放周期,并在Swift中小心关闭。这些通常是内存泄漏的罪魁祸首

没有看到你的任何代码,我真的不能在这里提供任何更具体的信息


祝你好运

如果没有任何代码,我只能猜测:可能您有一个保留周期,因此分配的内存无法释放?不可能将所有代码都放在这里。没有保留周期,因为我从仪器中检查了它们。问题是,如果您要创建一个简单的扩展,那么您也可以看到相同的行为。我的经验是,在Xcode 6.3 beta 3+之前,leaks工具实际上不适用于键盘扩展,而且在任何情况下,它只适用于非常简单的问题。虽然我经常看到
UIinputViewController
无法正确释放的情况,尽管显然没有循环,但每次对我来说都非常像一个保留循环。