键盘扩展内存泄漏?

Posted

技术标签:

【中文标题】键盘扩展内存泄漏?【英文标题】:Keyboard Extension Memory Leak? 【发布时间】:2018-05-30 00:16:06 【问题描述】:

我正在构建一个自定义键盘扩展(ios 9+)并且发现了一个非常烦人的内存泄漏

当离开应用程序(在此测试用例中为 Messages 应用程序)然后返回时,会发生此泄漏。通常(见下面 Xcode 的 Instruments7 的照片)

我实际上没有对模板做任何事情,但收到了这个泄漏。有没有人对如何解决这个问题有任何建议?...

更新

为了好玩,这里是光荣泄漏的屏幕截图...首先是我复杂的 VC 的 sn-p....????

这是在点击文本字段后关闭控制器,然后再次点击该字段

(显示 -> 隐藏 -> 显示)

#import "KeyboardViewController.h"

@implementation KeyboardViewController 

- (void)viewDidLoad 
    
    [super viewDidLoad];



- (void)viewWillAppear:(BOOL)animated 
    
    [super viewWillAppear:animated];
        


@end

【问题讨论】:

【参考方案1】:

尽管我想将赏金奖励给一个解决方案,但不是我收到的唯一答案......这个问题的答案真的是“哎呀,我没有做错任何事......”。

在深入调查真正是什么导致了这些泄漏(从字面上删除视图控制器实例之外的所有内容后总共 14 个)之后,我发现了 真正的罪魁祸首。

苹果


即使我删除 ALL 代码,实际上只留下以下代码

- (void)viewDidLoad 

    [super viewDidLoad];

    // Great...



- (void)viewDidAppear:(BOOL)animated 

    [super viewDidAppear:animated];

    // Super!


...我仍然得到 14 次泄漏,所有这些都来自 UIKitFoundationCoreFoundation。基本上,如果我从进程中删除任何其他内容,则没有进程,因为什么都不会发生。谁知道...也许那时泄漏仍然存在..

不过,幸运的是,这种泄漏不会破坏内存分配,除非您打算连续几年输入一条消息。我的代码中的其他任何东西似乎也没有恶化,所以除了它是一个非常丑陋的错误之外,我的结论是它还可以。

感谢苹果!

【讨论】:

【参考方案2】:

我有时会发现 Xcode Instruments 标记的零星泄漏,但我对此无能为力,因为问题出在 Apple 的代码中,这显然是你的情况。您唯一能做的就是提交错误报告并继续您的项目,特别是如果泄漏是零星的,并且只是几个字节的问题,并且不会及时积累。总之,如果这些条件适用,我不会太担心。

【讨论】:

与***.com/questions/45822434/… 类似,似乎每次出现键盘时,它都会“添加”一个新控制器,每次都递增而不会正确释放前一个实例。太荒谬了。

以上是关于键盘扩展内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章

内存泄漏,其中 CPython 扩展向 Python 返回一个“PyList_New”实例,该实例永远不会被释放

警告:connect.session() MemoryStore 不是为生产环境设计的,因为它会泄漏内存,并且不会扩展到单个进程

获取 ios 8 自定义键盘扩展的“因内存错误而终止”

如何检测 iPhone 上的内存泄漏?

如何根据 Leaks 提供的地址来检测内存泄漏的原因?

使用 VS Code 在 C++ 应用程序中查找内存泄漏