objective-c - NSCollectionViewItem self.view 的性能

标签 objective-c cocoa

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

无论如何,在保存 NSCollectionViewItem 的(自定义)类中,当更新特定的绑定(bind)值时,我会在项目的 View 上调用一个方法。

问题是,仅访问[自身 View ]就需要花费大量时间。这是通过将对 [self view] 的调用分解为另一个方法并对其运行检测来演示的。方法如下

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

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

对于为什么会出现这种情况有什么想法吗?

最佳答案

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

这是ImageKitDemoImageBrowser示例项目。

关于[self view]的性能问题,可能是每次从nib延迟加载 Collection View ,并且调用[self view] code> 是导致从内存或磁盘实例化另一个实例的原因。虽然我自己没有使用过 NSCollectionView,但我的直觉是,与 IKImageBrowserView 相比,大量的 NSView 可能会产生更大的开销它使用 NSView 与类似 NSCell 的可重用绘图机制的标准耦合来帮助提高性能。

参见Avoid the Overuse of Views :

"A good example of when to use custom objects is a photo browser that displays thumbnail images of hundreds or even thousands of photos. Wrapping each photo in an NSView instance would both be prohibitively expensive and inefficient. Instead, you would be better off by creating a lightweight class to manage one or more photos and a custom view to manage that lightweight class."

(在很多地方,单个 NSView 子类会重用 NSCell 子类来帮助实现其内容的绘制。在这方面, NSCell 基本上充当一个小型“绘图机”)。

关于objective-c - NSCollectionViewItem self.view 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5841991/

相关文章:

objective-c - NS菜单项 : Truncation and setLineBreakMode

objective-c - 如何将变量传递给我在使用 @selector(methodname) 时调用的新方法

ios - 如何将自定义对象保存在数组中并将其存储在 NSUserDefaults - iPhone

objective-c - JSON Payload 似乎没有发送

ios - openParentApplication 不响应 Watchkit Extension 中的 handleWatchKitExtensionRequest

cocoa - NSTableCellView 和雪豹

cocoa - Java代码移植到Objective-C非常慢

iOS 将 const char 与 int 连接起来

ios - 在 swift 中声明 unsigned char 数组

cocoa - 将字符串数据从我的 Cocoa 应用程序拖动到第三方 Cocoa 应用程序