我想我记得有关在主线程上更新UI的一些内容,可能是解释,但我的问题是我有一个UIScrollView,里面有1000多个图像,我写了一个例程,可以快速切换图像在视图中显示其真实图像,当超出可见视图时,它们切换到占位符图像。所有屏幕外图像共享相同的占位符,大大减少了内存负载。
我编写了两种方法来打开/关闭视图的下几个图块,如果你在某个方向上滚动得足够的话,就会被踢掉。通过UIScrollViewDelegate回调方法scrollViewDidScroll检测滚动。
此策略运行正常,但滚动视图滚动在慢速设备(iPad 1)上有点紧张。我想提高性能,所以我想我可以更改代码,以便更新scrollview内容的两个方法是NSOperationInvocation,添加到NSOperationQueue。
然而,当我这样做时,即使优先级设置为VeryHigh,即使它们似乎被调用也不会更新UI的例程,并且当滚动时队列确实增长。观察到的行为是图像保留其占位符图像并且不会打开。
为什么这不起作用?
NSOperationInvocation的代码:
ImageThumbView *thumb = [boardThumbsArray objectAtIndex:lowestLoadedThumbTag - i];
[loadedThumbsArray addObject:thumb];
[thumb showThumbImage];
ImageThumbView是一个UIButton子类
- (void)showThumbImage {
if (thumbImagePath != nil) {
thumbImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL fileURLWithPath:thumbImagePath]]];
} else {
NSLog(@"%@", @"Cannot show thumb image: thumbImagePath is nil");
}
[self setBackgroundImage:thumbImage forState:UIControlStateNormal];
[self setNeedsDisplay];
}
答案 0 :(得分:0)
查看Apple的“PhotoScroller”示例代码。您不应该有1000个视图作为scrollview的子视图。回收那些不再可见的。
另请参阅WWDC 2010“使用scrollview设计应用程序”视频。这解释了photoscroller示例代码
由于