iOS中使用performSelector是什么
我有点困惑关于performSelector 。 我已经在使用Google。 但对我不清楚。 任何人都可以解释performSelector的作用。
谢谢
[self btnClicked];
和
[self performSelector:@selector(btnClicked)]; -(void)btnClicked { NSLog(@"Method Called"; }
对我来说都是好的 这两者有什么区别? [self btnClicked]
和[self performSelector:@selector(btnClicked)]
;
两者在使用时相同,但是后者具有可以dynamic确定在运行时调用哪个select器的优点。
SEL selector = [self gimmeASelectorToCall]; [self performSelector: selector];
[资源]
苹果文档是你的朋友。
NSObject协议参考
它
将指定的消息发送给接收方,并返回消息的结果。
尤其是:
performSelector:
方法等同于直接向接收方发送aSelector消息 。 例如,以下所有三个消息都做同样的事情:id myClone = [anObject copy]; id myClone = [anObject performSelector:@selector(copy)]; id myClone = [anObject performSelector:sel_getUid("copy")];
但是,performSelector:方法允许您发送直到运行时才确定的消息 。 variablesselect器可以作为parameter passing:
SEL myMethod = findTheAppropriateSelectorForTheCurrentSituation(); [anObject performSelector:myMethod];
aSelector参数应该标识一个不带参数的方法。 对于返回非对象的方法,使用NSInvocation。
希望有所帮助。
selector
对象可以让你在编译时调用一个你不知道的方法。 你只需要知道一个方法的名字作为一个string来调用它。
当你调用的方法的名字在编译时是已知的,使用select器是适得其反的:代码变得不太可读,没有明显的优势。 当你正在编写一个库需要调用与库分开编译的其他代码中的方法时,select器提供了一种解耦这两个代码的方法。
例如,如果你正在编写一个计时器类,当一个时间间隔结束的时候你可以给你回电话,你的计时器不知道需要调用的函数的名字,所以它不能写这样的东西:
// We do not know if the function is called intervalHasExpired or something else [target intervalHasExpired];
但是如果你给你的计时器一个select器,计时器将能够给你回电话。
[myTimer scheduleWithTarget:self andSelector:@selector(myCompletion)];
PerformSelector基本上允许你决定在运行时传递什么消息(后期绑定),而不是像普通的C这样的语言。如果你知道一个方法在目标C类中的名字,你可以使用
NSSelectorFromString()
将string转换为select器,并让你的类使用performSelector调用该select器。 这样,您可以select不同的函数在运行时调用。 你甚至可以select使用configuration文件调用哪个函数。
performSelector
调用已经在类中声明和实现的方法。 在需要将代码中的操作附加到事件时使用。