Objective c n集合视图';setContent:内存管理
我有一个使用Objective c n集合视图';setContent:内存管理,objective-c,macos,cocoa,memory-management,nscollectionview,Objective C,Macos,Cocoa,Memory Management,Nscollectionview,我有一个使用[collectionView setContent:data]填充的NSCollectionView其中data是一个NSArray填充了所有相同自定义NSObject子类的对象。集合视图的项原型是标准的NSCollectionViewItem,而不是子类。集合项的视图是使用myNSObject子类中的绑定填充的 现在问题来了,当使用HeapShot分析我的应用程序时,我发现在使用collection视图打开窗口时,内存会大幅增加。仪器将此内存增加精确定位到[collectionV
[collectionView setContent:data]填充的NSCollectionView
其中data
是一个NSArray
填充了所有相同自定义NSObject
子类的对象。集合视图的项原型是标准的NSCollectionViewItem
,而不是子类。集合项的视图是使用myNSObject
子类中的绑定填充的
现在问题来了,当使用HeapShot分析我的应用程序时,我发现在使用collection视图打开窗口时,内存会大幅增加。仪器将此内存增加精确定位到[collectionView设置内容:数据]代码>行。这个内存永远不会被回收。有什么想法吗
编辑:我访问数据对象的方式如下:
NSArray *data = [[[[MWWeatherController sharedInstance] cachedData] objectForKey:[NSString stringWithFormat:@"%u",index]] objectForKey:@"daily"];
我认为你没有在你的范围内发布数据。。。如果您拥有“数据”对象,请确保将其释放
一些问题可以更好地回答它--
如何分配“数据”
谁在发布它
[collectionView设置内容:数据];关于这一行的更多代码片段
您是否已使CollectionView KVO的ViewController兼容
CollectionView的XIB是否有ArrayController
将XIB的CollectionView绑定到ArrayController的arrangedObjects,并通过ViewController方法(例如setMyCustomObjectsArray)设置项目,该方法再次设置ArrayController观察到的阵列
确保在自定义对象的dealloc方法中正确释放所有内容。如果我能澄清任何内容,请告诉我。数据存储在单例类的NSDictionary
中。数据不只是用于收集视图,我在应用程序的其他地方使用这些数据。我已经更新了我的问题,显示了我如何访问数据。另外,是仪器指出内存泄漏,还是简单的大量内存?什么是“巨大的”。如果是内存泄漏,请记住,instruments只是指出代码中存在内存泄漏的位置,而不一定是导致内存泄漏的位置。如何知道我的集合视图项是否符合KVO?它全部由IB管理,没有子类或任何东西。我刚刚尝试使用数组控制器管理集合视图的内容,但Instruments heapshot分析仍然将内存增加指向我向数组添加对象的那一行。另外,我确实在自定义对象的dealloc方法中正确地释放了所有内容。关于您最初的问题:实际上您应该只设置数组的项,而不分配数组本身。该阵列应该由视图控制器的arraycontroller进行观察。好的,在进一步调查之后,看起来使用阵列控制器修复了内存增加!谢谢你的帮助!