在Leaks中调试发现有自定义的NSCollectionView中调用系统方法collectionView makeItemWithIdentifier: 内存泄漏,
CopyCoItem*cell=[collectionView makeItemWithIdentifier:@"xxx" forIndexPath:indexPath];
最后的解决方案:创建一个list(下文中的_coItemList)专门管理对应的自定义的NSCollectionViewItem,取的时候直接取数组中的对象
- (NSInteger)collectionView:(NSCollectionView*)collectionView numberOfItemsInSection:(NSInteger)section {
return self.list.count;
}
- (NSCollectionViewItem*)collectionView:(NSCollectionView*)collectionView itemForRepresentedObjectAtIndexPath:(NSIndexPath*)indexPath API_AVAILABLE(macos(10.11)) {
// CopyCoItem *cell = [_coItemList objectAtIdx:indexPath.item];//需要保证不为空,_coItemList就是专门保存item的view,CopyCoItem为自定义的NSCollectionViewItem
//上面的cell复用有一些问题,使用下面这个方式来获取自定义的NSCollectionViewItem,但是每次reload都会为空,重新创建
CopyCoItem*cell = (CopyCoItem*)[collectionView itemAtIndexPath:indexPath];
if(!cell) {
cell=[self coItem];
}
CopyMo*mo = [_list objectAtIdx:indexPath.item];
cell.mo= mo;
returncell;
}
网友评论