NSCollectionViewItem的self.view性能

时间:2011-04-30 13:18:37

标签: objective-c cocoa

我正在考虑将NSCollectionView用于照片库应用程序,这将允许浏览10,000多张图像。我不确定NSCollectionView是否是最好的,或者如果我应该考虑其他方法,所以如果你有意见,请随意扔2美分。

无论如何,在持有NSCollectionViewItem的(自定义)类中,当更新特定的绑定值时,我会在项目的视图上调用方法。

问题是,只是访问[自我视图]花费了过多的时间。通过将对[self view]的调用分解为另一种方法并对其运行检测来证明这一点。以下方法

- (NSBox*)getBox {
    return (NSBox*)[self view];
}

比任何其他单一方法花费大约100倍的处理时间。是的,它被多次调用,但如果我改为返回self而不是self.view,则getBox方法甚至不会出现在处理列表中。

关于为什么会出现这种情况的任何想法?

1 个答案:

答案 0 :(得分:2)

为什么不使用Image Kit的IKImageBrowserView,它基本上是一个类似iPhoto的图像浏览器?

ImageKitDemoImageBrowser示例项目。

关于[self view]的性能问题,可能是每次从nib懒惰地加载集合视图,而对[self view]的调用是导致另一个实例从内存中实例化的原因或从磁盘。虽然我自己没有使用NSCollectionView,但我的直觉是,与NSView相比,使用IKImageBrowserView的{​​{1}}可能会产生更大的开销。 1}}使用NSView - 像可重复使用的绘图机制来帮助提高性能。

请参阅Avoid the Overuse of Views

  

“何时使用自定义的一个很好的例子   对象是一个照片浏览器   显示数百个缩略图   甚至数千张照片。包皮   NSCell实例中的每张照片都会   两者都非常昂贵   效率低下。相反,你会   通过创建轻量级更好   用于管理一张或多张照片的课程   一个自定义视图来管理它   轻量级。“

(在许多地方,单个NSView子类将重用NSView子类来帮助实现其内容的绘制。在这方面,NSCell基本上充当了小“拉丝机”)。