目标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 中创建调度队列? [复制]

我们如何在目标 c 中添加文本字段来推送通知? [复制]

第19篇 SE-SSD论文翻译

如何在目标 C 中将 NSInteger 值转换为 int 值? [复制]

Visual Studio 2017 C ++ linux应用程序,标头未复制到目标

Java SE 和 Java EE 之间的主要区别是啥? [复制]