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: