Iphone 异步更新UIView

Iphone 异步更新UIView,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,我有一个应用程序,点击按钮可以启动一些冗长的操作,包括重建视图层次结构。因为它们可能需要几秒钟才能完成,所以我让它们异步并将调用卸载到NSOperationsQueue中。我知道在操作完成之前视图不会更新,但至少我正在重新绘制按钮(它不会停留在突出显示模式) 此更改后,视图重画将在最后一次点击后延迟约5秒。我试着引用这两种方法 [self setNeedsDisplay]; 及 在异步操作中:没有任何更改。有没有办法在后台操作完成后强制视图重画?您的操作的main方法或块或调用的外观如何?UI

我有一个应用程序,点击按钮可以启动一些冗长的操作,包括重建视图层次结构。因为它们可能需要几秒钟才能完成,所以我让它们异步并将调用卸载到
NSOperationsQueue
中。我知道在操作完成之前视图不会更新,但至少我正在重新绘制按钮(它不会停留在突出显示模式)

此更改后,视图重画将在最后一次点击后延迟约5秒。我试着引用这两种方法

[self setNeedsDisplay];


在异步操作中:没有任何更改。有没有办法在后台操作完成后强制视图重画?

您的操作的
main
方法或块或调用的外观如何?UI更改不能反映在后台线程中,因此您需要在主线程中执行,您需要创建一个方法并从main调用它thread@Eimantas:它是一种方法,可以遍历一些分支内部数据结构(树),创建一些视图,在需要时调用
addSubview:
removeFromSuperview
。我看不出这有什么不同,虽然你仍然可以在后台执行所有这些操作,但可以在主线程上执行“添加/删除”视图。@mackworth:在我将方法卸载到单独的线程之前,我让它们在主线程中被调用(同步)。在分析这种形式的应用程序时,我发现,在添加/删除每个视图后,这些冗长操作的大部分时间都花在CA方法上,即重新绘制和提交可视事务。因此,我希望通过使它们异步来实现:(1)使按钮正常执行,(2)推迟重画操作,直到所有视图都添加到层次结构中。因此,在主线程中执行视图操作会扼杀使事情异步化的意图。
[self performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO];