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调用已经在类中声明和实现的方法。 在需要将代码中的操作附加到事件时使用。