Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
何时/何地使用箭头符号-&燃气轮机&引用;应在Objective-C中使用?_Objective C_Notation - Fatal编程技术网

何时/何地使用箭头符号-&燃气轮机&引用;应在Objective-C中使用?

何时/何地使用箭头符号-&燃气轮机&引用;应在Objective-C中使用?,objective-c,notation,Objective C,Notation,我刚刚清楚地解释了“->”符号的含义: 但我仍然不明白Objective-C中这个符号的实际用例是什么 下面是我所说的例子:-为什么像internal->lock这样的字符串都写在这里-为什么不使用ivar或点表示法呢 相关主题:。从您的问题中,不清楚您是否了解->操作员的工作 GNUStep NSOperation源代码中的示例使用ivar。这就是->操作符所做的-它取消引用指针并访问命名成员 至于“为什么不使用点表示法?”显而易见的答案是他们不想通过访问器。通过访问器比直接访问要慢,在这种

我刚刚清楚地解释了“->”符号的含义:

但我仍然不明白Objective-C中这个符号的实际用例是什么

下面是我所说的例子:-为什么像internal->lock这样的字符串都写在这里-为什么不使用ivar或点表示法呢



相关主题:。

从您的问题中,不清楚您是否了解
->
操作员的工作

GNUStep NSOperation源代码中的示例使用ivar。这就是
->
操作符所做的-它取消引用指针并访问命名成员

至于“为什么不使用点表示法?”显而易见的答案是他们不想通过访问器。通过访问器比直接访问要慢,在这种情况下,我们只处理“哑”内部状态,没有任何实际好处


那么什么时候应该在Objective-C代码中使用它呢?主要是在通过指针访问结构时。很少需要直接访问另一个对象的实例变量。如果您这样做,则该代码是例外,而不是规则。

可能是这种情况。我在apple的Reachability.m文件中看到了一个示例。下面是:

@implementation Reachability
{
    SCNetworkReachabilityRef _reachabilityRef;
}

+ (instancetype)reachabilityWithHostName:(NSString *)hostName
{
    ...
    if (reachability != NULL)
    {
        returnValue= [[self alloc] init];
        if (returnValue != NULL)
        {
            returnValue->_reachabilityRef = reachability;
        }
        ...
    }
    return returnValue;
}

因此,您可以使用它通过类方法中的对象调用全局变量。

这个答案包含了所有您想知道的内容>@AnoopVaidya,引用的文章没有描述用例,特别是没有描述为什么一种符号比另一种符号更可取。我想,我确实在这里问了一个有意义的问题。我猜作者不想使用点表示法来避免调用访问器方法的副作用+他们希望能够重新定义指向他们将来需要的任何东西的“内部”指针,所以->正好提供了这一点flexibility@Vladimir,对不起,我不明白你的意思“调用访问器方法的副作用”和“能够重新定义指向将来需要的任何对象的‘内部’指针””“很好。你能把这些观点用格式写在回答中吗?我会非常感激的!这些内部是一组复杂的宏,用于为不同的编译器和配置实现非脆弱的东西。我想你最好看看别的。事实上,GNUstep源代码是一个不好的开始学习东西的地方,自从计算机运行缓慢的日子以来,他们就使出浑身解数来优化东西。谢谢你的回答。很清楚。“…如果您这样做,则该代码是例外,而不是规则。”。你能解释一下,在什么情况下可能需要这样做吗?(我特别想知道这一点,因为我自己很少需要直接访问ivar,也可以看看“Github Objective-C约定”如何建议:除非您在-init或-dealloc等中,否则不要访问ivar)@Stanislaw:我真的不知道我是否可以解释在什么地方需要比“特殊情况”更精确的方法我有点想说“在需要弥补最后一点性能的情况下,不需要消息发送的开销”,但即使在这些情况下,通常也可以进行更好的设计级别优化,从而消除这种需要。但这种情况经常会出现。我读了你的评论,认为我需要使用->“几乎从不”))。谢谢。您可以经常使用它在类中方法以更快的速度初始化分配的实例,即不调用-init,特别是因为类可以访问其实例的私有属性。