1
[self performSelectorOnMainThread:@selector(customFoo:) withObject:obj waitUntilDone:YES];

[self customFoo:obj];

据我所知,如果在主线程上调用第二个,它们之间没有任何区别......对吗?

他们两个之间的基本区别是什么?

4

2 回答 2

2

运行时行为是相同的。但是在编译代码时有一个区别:第二个只有在定义了方法的情况下才会编译customFoo:

于 2012-04-23T10:30:13.960 回答
1

performSelector:向接收者发送指定的消息,并返回消息的结果。

PerformSelector 用于调用您想要执行的方法,这意味着您可以选择不同的选项来执行特定的任务(方法)示例...

– performSelector:withObject:afterDelay: // will execute method after specific delay.. 
– performSelector:withObject:afterDelay:inModes: 
– performSelectorOnMainThread:withObject:waitUntilDone: 
– performSelectorOnMainThread:withObject:waitUntilDone:modes:
– performSelector:onThread:withObject:waitUntilDone: 
– performSelector:onThread:withObject:waitUntilDone:modes:

– performSelectorInBackground:withObject:// 在后台执行任务。所以,你的 ManinThread(Application) 不会停止响应......就像多线程一样......

直接方法 ( [self customFoo:obj];) 不会提供执行任务的选择。

有关更多详细说明,请访问此参考。

希望对你有帮助...

于 2012-04-23T10:40:36.197 回答