目标c [复制]中NormalMethods和Selectors之间的差异
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了目标c [复制]中NormalMethods和Selectors之间的差异相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
在这里我无法理解什么是选择器?,现在我知道它用于调用方法,而另一些人说它是一个回调机制。
这两种方法有什么区别。实例已创建
Car *porsche = [[Car alloc] init];
这两种方法中哪种方法更好。
SEL stepTwo = @selector(driveForDistance:);
[porsche performSelector:stepOne];
要么
[porsche startEngine];
“哪一个更好” - 或者(六个)一个更好。他们有不同的目的。
此外,没有“正常”(或“异常”)方法。有方法。选择器是识别方法的唯一名称。
如果你不需要动态方法调度,那么就没有理由使用performSelector:
(更不用说使用错误的方式使用它 - 调用一个带有一个参数而没有任何参数的方法)。如果您知道要在对象上调用哪种方法,只需调用它即可。
如果需要反射和动态,那么使用选择器动态解析方法是有用和合理的。
performSelector
允许您动态确定在给定对象上调用选择器的选择器。换句话说,选择器不需要在运行时之前确定。
因此即使这些是等价的:
[theObject aMethod];
[theObject performSelector:@selector(theMethod)];
第二种形式允许您这样做:
SEL aSelector = findTheAppropriateSelectorForTheCurrentSituation();
[theObject performSelector: theSelector];
简答:
主要的东西performSelector
允许您动态确定哪个选择器调用给定对象上的选择器,而不需要确定它Runtime
。但由于两者都是In Perfromselector,因此Selector是方法的名称。 message是一个选择器以及您随之发送的参数。并且where方法是选择器和实现的组合。 Try this there are number of Question on SO.
以上是关于目标c [复制]中NormalMethods和Selectors之间的差异的主要内容,如果未能解决你的问题,请参考以下文章
如何在目标 C 中将 NSInteger 值转换为 int 值? [复制]