Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c n集合视图';setContent:内存管理_Objective C_Macos_Cocoa_Memory Management_Nscollectionview - Fatal编程技术网

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
,而不是子类。集合项的视图是使用my
NSObject
子类中的绑定填充的

现在问题来了,当使用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进行观察。好的,在进一步调查之后,看起来使用阵列控制器修复了内存增加!谢谢你的帮助!