Uiview 为什么可以';我是否使用NSOperationQueue/NSOperationInvocation更新UIScrollView的内容?

Uiview 为什么可以';我是否使用NSOperationQueue/NSOperationInvocation更新UIScrollView的内容?,uiview,uiscrollview,uibutton,uiimage,nsoperationqueue,Uiview,Uiscrollview,Uibutton,Uiimage,Nsoperationqueue,我想我记得一些关于UI在主线程上被更新的事情,可能是解释,但是我的问题是我有一个包含1000多个图像的UIScrollView,我编写了一个例程,可以快速切换视图中可见的图像以显示其真实图像,当不可见视图时,它们会切换到占位符图像。所有屏幕外图像共享同一占位符,大大减少了内存负载 我编写了两个方法,用于打开/关闭视图的下几个分幅,如果在某个方向上滚动足够多,则会将其关闭。滚动是通过UIScrollViewDelegate回调方法scrollViewDidScroll检测到的 这一策略效果不错,但

我想我记得一些关于UI在主线程上被更新的事情,可能是解释,但是我的问题是我有一个包含1000多个图像的UIScrollView,我编写了一个例程,可以快速切换视图中可见的图像以显示其真实图像,当不可见视图时,它们会切换到占位符图像。所有屏幕外图像共享同一占位符,大大减少了内存负载

我编写了两个方法,用于打开/关闭视图的下几个分幅,如果在某个方向上滚动足够多,则会将其关闭。滚动是通过UIScrollViewDelegate回调方法scrollViewDidScroll检测到的

这一策略效果不错,但在速度较慢的设备(iPad1)上,滚动视图有点紧张。我想提高性能,所以我想我可以更改代码,以便更新scrollview内容的两个方法是NSOperationInvocation,添加到NSOperationQueue中

但是,当我这样做时,即使优先级设置为VeryHigh,例程也不会更新UI,即使它们似乎被调用,并且滚动时队列确实会增长。观察到的行为是图像保留其占位符图像,而不打开

为什么这样不行

NSOPERATION职业代码:

    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示例代码

谢谢