Iphone 带有多个参数的performSelectorOnMainThread

Iphone 带有多个参数的performSelectorOnMainThread,iphone,objective-c,ios,multithreading,asynchronous,Iphone,Objective C,Ios,Multithreading,Asynchronous,我试图在主线程上执行此操作: [curItem.mButton setBackgroundImage:newArt forState:UIControlStateNormal]; 所以我做这个 cWrapperObject* obj = [cWrapperObject alloc]; [obj setupParams :curItem.mButton :newArt]; [obj performSelectorOnMainThread:@selector(setImageForButton)

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

[curItem.mButton setBackgroundImage:newArt forState:UIControlStateNormal];
所以我做这个

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

我觉得这很糟糕,有人对我如何以不同的方式处理这个问题有什么建议吗?

另一个选择是GCD。您可以在主队列上调用一个块,该块在运行循环运行时连续运行。块不限于一个对象,如performSelectorOnMainThread

dispatch_async(dispatch_get_main_queue(), ^{
   // code here
});
我在这里对performSelectorXXX和GCD进行了更全面的比较,并提供了一些示例:

另外,这里还有另一个相关的SO帖子:


如果只需要传递一个参数,则应在方法
中设置“withObject:”参数,执行SelectorOnMainThread:withObject:waitUntilDone
。因此,您的方法应该声明为

-(void)setImageForButton:(id)parameter
您应该在主线程上使用以下命令调用方法:

[obj performSelectorOnMainThread:@selector(setImageForButton:) withObject:newArt waitUntilDone:YES];
注意:“:”在
@selector(setImageForButton:)
中,这意味着此方法将使用一个参数发送消息,并通过
和object: