performSelector 是立即执行还是计划稍后执行?
问问题
114 次
2 回答
4
从文档
该
performSelector:
方法相当于直接向接收者发送一个 aSelector 消息。
所以它立即执行。
同样来自文档,这两条消息是等效的
id myClone = [anObject copy];
id myClone = [anObject performSelector:@selector(copy)];
并且它们实际上都将最终编译成
objc_msgSend(anObject, @selector(copy));
编辑
在根据 Anoop 的回答进行讨论之后,我认为值得指出的是,并非所有的变体都会performSelector:
立即执行。有一堆由它定义的变体NSObject
将导致动作被安排。此外,重要的是要注意,即使在 0 延迟的情况下也是如此,正如文档中明确指出的那样:
指定延迟为 0不一定会导致选择器立即执行。选择器仍在线程的运行循环中排队并尽快执行。
总结一下,这是一个相关的变体列表
立即执行的变体:
performSelector:
performSelector:withObject:
performSelector:withObject:withObject:
计划执行的变体(即使延迟为 0)
performSelector:withObject:afterDelay:
performSelector:withObject:afterDelay:inModes:
performSelectorOnMainThread:withObject:waitUntilDone:
performSelectorOnMainThread:withObject:waitUntilDone:modes:
performSelector:onThread:withObject:waitUntilDone:
performSelector:onThread:withObject:waitUntilDone:modes:
performSelectorInBackground:withObject:
于 2013-04-09T03:44:36.807 回答
1
performSelector:
,performSelector:withObject:
并performSelector:withObject:withObject:
立即执行。
你可以在这里找到文档。
于 2013-04-09T03:44:36.177 回答