我正在考虑将NSCollectionView用于照片库应用程序,这将允许浏览10,000多张图像。我不确定NSCollectionView是否是最好的,或者如果我应该考虑其他方法,所以如果你有意见,请随意扔2美分。
无论如何,在持有NSCollectionViewItem的(自定义)类中,当更新特定的绑定值时,我会在项目的视图上调用方法。
问题是,只是访问[自我视图]花费了过多的时间。通过将对[self view]的调用分解为另一种方法并对其运行检测来证明这一点。以下方法
- (NSBox*)getBox {
return (NSBox*)[self view];
}
比任何其他单一方法花费大约100倍的处理时间。是的,它被多次调用,但如果我改为返回self而不是self.view,则getBox方法甚至不会出现在处理列表中。
关于为什么会出现这种情况的任何想法?
答案 0 :(得分:2)
为什么不使用Image Kit的IKImageBrowserView
,它基本上是一个类似iPhoto的图像浏览器?
有ImageKitDemo和ImageBrowser示例项目。
关于[self view]
的性能问题,可能是每次从nib懒惰地加载集合视图,而对[self view]
的调用是导致另一个实例从内存中实例化的原因或从磁盘。虽然我自己没有使用NSCollectionView
,但我的直觉是,与NSView
相比,使用IKImageBrowserView
的{{1}}可能会产生更大的开销。 1}}使用NSView
- 像可重复使用的绘图机制来帮助提高性能。
请参阅Avoid the Overuse of Views:
“何时使用自定义的一个很好的例子 对象是一个照片浏览器 显示数百个缩略图 甚至数千张照片。包皮
NSCell
实例中的每张照片都会 两者都非常昂贵 效率低下。相反,你会 通过创建轻量级更好 用于管理一张或多张照片的课程 一个自定义视图来管理它 轻量级。“
(在许多地方,单个NSView
子类将重用NSView
子类来帮助实现其内容的绘制。在这方面,NSCell
基本上充当了小“拉丝机”)。