NSCollectionView 内存泄漏

问题描述

我有一个 NSCollectionView 指定为我的数据源和我的委托。

我有两个问题:

  1. 而不是使用 registerClass 方法,而是尝试使用 3 行注释代码和(非 nil)protoNib 方法注册 NSCollectionView 导致 {{1} } 永远为零。

  2. 使用类注册表选项,一切正常。但是,如果我删除 theItemwilldisplayItem 存根,系统在第一次调用 didEnddisplayingItem 时会消耗大量内存(对这两个存根进行了数千次内部调用)并最终崩溃。 Instruments 显示 数千 4k itemForRepresentedobjectAtIndexPath 是由 @autoreleasepool content items 创建的。

知道为什么会发生这种情况吗?

AppKit

解决方法

Appkit 类并非设计为它们自己的委托。 NSCollectionView 实现了几个 NSCollectionViewDelegate 方法并调用委托。我不知道为什么它是这样实现的,感觉不对,但事实就是如此。如果集合视图是它自己的委托,并且子类中没有实现委托方法,则调用会导致无限循环。解决方案:不要将 delegate 设置为 self