首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSCollectionView内存问题

NSCollectionView内存问题
EN

Stack Overflow用户
提问于 2016-02-23 22:29:34
回答 1查看 342关注 0票数 1

我的环境是Yosemite 10.10.5和使用ARC的Xcode7.2。

我有一个使用NSCollectionView的应用程序,并且经历了持续的内存增长。我已经能够创建一个小示例来展示相同类型的行为。

我从一个具有集合视图属性的视图控制器开始。

代码语言:javascript
复制
@property (weak) IBOutlet NSCollectionView *collectionView;

视图控制器为该视图设置原型单元。原型的.xib包含一个顶层视图,以及一个图像按钮作为其唯一的子视图。

代码语言:javascript
复制
- (void)viewDidLoad {
    [super viewDidLoad];
    [self.collectionView setItemPrototype:[[CollectionViewItem alloc] initWithNibName:@"CollectionViewItem"
                                                                               bundle:nil]];
}

我通过在视图出现时创建计时器并每两秒运行一次来模拟数据刷新。当计时器触发时,它将执行一个目标方法。

代码语言:javascript
复制
- (void)timerFired:(NSTimer *)aTimer {
    NSMutableArray *dataItems = [NSMutableArray array];
    for (int i = 0; i < 5; i++) {
        CollectionDataItem *item = [[CollectionDataItem alloc] init];
        [dataItems addObject:item];
    }
    [self.collectionView setContent:dataItems];
}

CollectionViewItem的代码只是设置一个按钮图像。(我之所以这么做,是因为在最初的应用程序中,很多多余的内存都与图像创建有关。)

代码语言:javascript
复制
- (void)viewWillAppear {
    [super viewWillAppear];
    [self.theButton setImage:[[NSImage alloc] initWithContentsOfFile:@"/Users/pmills/Desktop/d20c9f20a50352593498c0e7633e3ae7.jpg"]];
}

当我使用Instruments分析应用程序时,我看到从.xib文件加载的顶级对象(NSView)的数量增加了,即使CollectionViewItem计数保持在5。向下查看,我发现每个多余的视图都有两个保留计数。(每个视图有72个保留/释放/自动释放事件,我还没有弄清楚哪些保留是个问题……我正在努力。)

将我的timerFired:代码放在自动发布部分没有任何帮助。具体地说,当CollectionViewItem消失时,将按钮的图像和按钮本身置零也没有帮助,同样,试图用一个空的视图替换加载的视图也没有什么变化。

我遗漏了什么?

-更新--

经过多次实验,我意识到这种情况并不总是发生。它似乎与应用程序是否正在处理有关(鼠标?)事件。也就是说,如果我在应用程序运行时坐下来观看Instruments,则内存会按此处所述的方式增加。如果我将应用程序带到前台(或者在前台移动鼠标),积压的对象就会被清除。

这不是一个解决方案,但可能会启发一个解决方案。:)

EN

回答 1

Stack Overflow用户

发布于 2019-11-26 22:01:00

我也遇到了同样的问题。应用程序的内存占用不断增加。经过调试,我发现即使是NSCollectionViewNSViewControllerdeinit也在被调用,但是NSCollectionItem单元被搁置在内存中,并且没有被释放。内存中NSCollectionItem单元的不断增加极大地增加了应用程序的内存占用。

解决方案:当使用自定义类创建NSCollectionItem时,FileOwner默认设置为CustomClassName,清除此选项将从内存中解决经过验证和释放的NSCollectionItem信元。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35580209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档