Xcode Cocoa框架中是否存在内存泄漏?还是我遗漏了什么? 要重现此问题,只需创建Cocoa应用程序,请选择 Swift或Objective-C(我已经测试了两者)都可以运行该项目

Xcode Cocoa框架中是否存在内存泄漏?还是我遗漏了什么? 要重现此问题,只需创建Cocoa应用程序,请选择 Swift或Objective-C(我已经测试了两者)都可以运行该项目,xcode,macos,memory-leaks,Xcode,Macos,Memory Leaks,打开调试导航器(应用程序的初始内存消耗 应该在25MB左右),只需使用空应用程序的 下拉菜单,观察内存消耗在短时间内显著增长 然后从Xcode OpenInstruments中的opendeveloper工具,在 选择分析模板选择泄漏并选择您的应用程序作为 单击目标,然后单击记录按钮 现在只需玩你的应用程序,调整窗口大小,打开下拉列表 菜单。几分钟后,您会注意到内存消耗将减少 上升到110MB以上,如果单击,您将注意到泄漏点 应用程序的内存泄漏将继续增加,直到系统内存不足。
 暂停,然后单击检测

打开调试导航器(应用程序的初始内存消耗 应该在25MB左右),只需使用空应用程序的 下拉菜单,观察内存消耗在短时间内显著增长

  • 然后从Xcode Open
    Instruments
    中的
    opendeveloper工具
    ,在
    选择分析模板
    选择
    泄漏
    并选择您的应用程序作为 单击目标,然后单击记录按钮

  • 现在只需玩你的应用程序,调整窗口大小,打开下拉列表 菜单。几分钟后,您会注意到内存消耗将减少 上升到110MB以上,如果单击,您将注意到泄漏点

  • 应用程序的内存泄漏将继续增加,直到系统内存不足。


  • 暂停,然后单击检测到的泄漏点(时间线上的红色十字),您可能会看到以下一些罪犯:
  • 列表太长,所以我只列出了几个,但它们都来自AppKit,毫无例外:

    _NSLocalEventObserver   1   0x60000023ab00  32 Bytes    AppKit  +  [NSEvent addLocalMonitorForEventsMatchingMask:placement:handler:]
    _NSViewAuxiliary    1   0x110107080 448 Bytes   AppKit  -[NSView(NSInternal) _allocAuxiliary:]
    NSPopUpButtonCell   1   0x6080001c7530  240 Bytes   AppKit  -[NSControl initWithFrame:]
    NSControlAuxiliary  1   0x60800024c840  48 Bytes    AppKit  -[NSControl _commonEarlyInit]
    NSMutableDictionary 1   0x60800024c6c0  48 Bytes    AppKit  -[NSCell setFont:]
    NSPopUpButton   1   0x60800036e940  192 Bytes   AppKit  -[NSSpellChecker init]
    NSCellAuxiliary 1   0x6080000eb280  128 Bytes   AppKit  -[NSCell init]
    Malloc 48 Bytes 1   0x60800024c6f0  48 Bytes    AppKit  -[NSCell setFont:]
    NSMenu  1   0x608000861f40  64 Bytes    AppKit  -[NSPopUpButtonCell initTextCell:pullsDown:]
    _NSMenuImpl 1   0x6080000cdc10  112 Bytes   AppKit  -[NSMenu _createExtraIvars]
    NSCarbonMenuImpl    1   0x6080000cdc80  112 Bytes   AppKit  -[NSMenu _createMenuImpl]
    NSExtraMICData  1   0x608000038c00  32 Bytes    AppKit  -[NSMenuItemCell initTextCell:]
    NSMutableArray  1   0x60800024daa0  48 Bytes    AppKit  -[NSMenu insertItem:atIndex:]
    

    这是已知的bug吗?我还没有接触过Xcode生成的代码。AppKit或Cocoa框架中是否存在内存泄漏,或者两者都存在?还是我做错了什么?

    内存大小将因(4)而增长–菜单等对象在首次使用之前可能无法分配,但这种增长不会是无限的

    无法复制您的结果:在10.13.2和Xcode 9.2下运行时,未发现无限制增长,也未报告泄漏


    这并不是说你没有看到它,只是原因不明,但不太可能是框架本身的“漏洞”。尝试另一台机器,检查您的设置,等等。

    感谢您花时间实际尝试,看看是否真的有问题。购买所有对象分配后的方式,内存消耗不应超过某一点,在这种情况下确实如此。