调用Objective-C方法

nod*_*nja 0 cocoa cocoa-touch objective-c

假设我有一个名为foo的方法.有什么区别:

[self foo];
Run Code Online (Sandbox Code Playgroud)

[self performSelector:@selector(foo)];
Run Code Online (Sandbox Code Playgroud)

它们是一样的吗?第一个似乎更容易,所以为什么你想要使用第二个?

mik*_*iku 5

来自文档:

performSelector:方法相当于直接向接收器发送aSelector消息.例如,以下所有三条消息都执行相同的操作:

id myClone = [anObject copy];
id myClone = [anObject performSelector:@selector(copy)];
id myClone = [anObject performSelector:sel_getUid("copy")];
Run Code Online (Sandbox Code Playgroud)

但是,该performSelector:方法允许您发送在运行时之前未确定的消息.变量选择器可以作为参数传递:

SEL myMethod = findTheAppropriateSelectorForTheCurrentSituation();
[anObject performSelector:myMethod];
Run Code Online (Sandbox Code Playgroud)