MacOS NSCollectionViewItem 内存泄漏问

2021-12-22  本文已影响0人  devileatapple

在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;

}

上一篇下一篇

猜你喜欢

热点阅读