performSelectorOnMainThread带有多个参数

Tur*_*age 6 iphone multithreading asynchronous objective-c ios

我试图在主线程上执行此操作:

[curItem.mButton setBackgroundImage:newArt forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)

所以我这样做......

cWrapperObject* obj = [cWrapperObject alloc];
[obj setupParams :curItem.mButton :newArt];
[obj performSelectorOnMainThread:@selector(setImageForButton) withObject:nil waitUntilDone:YES];
Run Code Online (Sandbox Code Playgroud)

我觉得这很糟糕,有没有人对我如何处理这种方式有任何建议?

bry*_*mac 13

另一种选择是GCD.您可以在主队列上调用一个块,该块在运行循环运行时以串行方式运行.块不限于像performSelectorOnMainThread这样的一个对象.

dispatch_async(dispatch_get_main_queue(), ^{
   // code here
});
Run Code Online (Sandbox Code Playgroud)

我在这里写了一个更全面的performSelectorXXX和GCD比较,以及样本:

GCD,线程,程序流和UI更新

另外,这是另一个相关的SO帖子:

GCD在主线程中执行任务