【问题标题】:Difference Between NormalMethods and Selectors in objective c [duplicate]目标c中NormalMethods和Selectors之间的区别[重复]
【发布时间】:2013-05-24 09:26:56
【问题描述】:

这里看不懂什么是选择器,现在才知道是用来调用方法的,还有人说是回调机制。

这两种方法有什么区别。 实例已创建

Car *porsche = [[Car alloc] init];

这两种方法哪个更好。

SEL stepTwo = @selector(driveForDistance:);
[porsche performSelector:stepOne];

[porsche startEngine];

【问题讨论】:

标签: iphone ios objective-c ipad selector


【解决方案1】:

“哪一个更好” - 没有一个更好(原文如此)。他们有不同的目的。

此外,没有“正常”(或“异常”,就此而言)方法。有方法。而选择器是识别方法的唯一名称。

如果您不需要动态方法分派,那么就没有理由使用performSelector:(更不用说以错误的方式使用它了——调用一个只接受一个参数而没有任何参数的方法)。如果您知道要在对象上调用哪个方法,只需调用它即可。

如果您需要反射和动态,那么使用选择器来动态解析方法是有用且合理的。

【讨论】:

    【解决方案2】:

    performSelector 允许您动态确定要调用给定对象上的选择器的选择器。换句话说,选择器不需要在运行前确定。

    因此,即使它们是等价的:

    [theObject aMethod]; 
    [theObject performSelector:@selector(theMethod)];
    

    第二种形式允许您这样做:

    SEL aSelector = findTheAppropriateSelectorForTheCurrentSituation();
    [theObject performSelector: theSelector];
    

    【讨论】:

      【解决方案3】:

      简答:

      主要的东西performSelector 允许您动态确定在给定对象上调用哪个选择器,而无需确定它Runtime。但是因为两者都是一些在 Perfromselector 中,所以 Selector 是方法的名称。 message 是一个选择器以及您使用它发送的参数。其中方法是选择器和实现的组合。 Try this there are number of Question on SO.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-28
        • 1970-01-01
        • 2012-12-14
        • 1970-01-01
        • 2014-11-07
        • 2010-12-05
        • 2017-09-02
        • 1970-01-01
        相关资源
        最近更新 更多