Uiview 为什么可以';我是否使用NSOperationQueue/NSOperationInvocation更新UIScrollView的内容?
我想我记得一些关于UI在主线程上被更新的事情,可能是解释,但是我的问题是我有一个包含1000多个图像的UIScrollView,我编写了一个例程,可以快速切换视图中可见的图像以显示其真实图像,当不可见视图时,它们会切换到占位符图像。所有屏幕外图像共享同一占位符,大大减少了内存负载 我编写了两个方法,用于打开/关闭视图的下几个分幅,如果在某个方向上滚动足够多,则会将其关闭。滚动是通过UIScrollViewDelegate回调方法scrollViewDidScroll检测到的 这一策略效果不错,但在速度较慢的设备(iPad1)上,滚动视图有点紧张。我想提高性能,所以我想我可以更改代码,以便更新scrollview内容的两个方法是NSOperationInvocation,添加到NSOperationQueue中 但是,当我这样做时,即使优先级设置为VeryHigh,例程也不会更新UI,即使它们似乎被调用,并且滚动时队列确实会增长。观察到的行为是图像保留其占位符图像,而不打开 为什么这样不行 NSOPERATION职业代码:Uiview 为什么可以';我是否使用NSOperationQueue/NSOperationInvocation更新UIScrollView的内容?,uiview,uiscrollview,uibutton,uiimage,nsoperationqueue,Uiview,Uiscrollview,Uibutton,Uiimage,Nsoperationqueue,我想我记得一些关于UI在主线程上被更新的事情,可能是解释,但是我的问题是我有一个包含1000多个图像的UIScrollView,我编写了一个例程,可以快速切换视图中可见的图像以显示其真实图像,当不可见视图时,它们会切换到占位符图像。所有屏幕外图像共享同一占位符,大大减少了内存负载 我编写了两个方法,用于打开/关闭视图的下几个分幅,如果在某个方向上滚动足够多,则会将其关闭。滚动是通过UIScrollViewDelegate回调方法scrollViewDidScroll检测到的 这一策略效果不错,但
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];
}看看苹果的“PhotoScroller”示例代码。您不应该将1000个视图作为scrollview的子视图。回收那些不再可见的
另请看WWDC 2010“使用scrollview设计应用程序”视频。这就解释了photoscroller示例代码
谢谢