8

我刚刚清楚地解释了“->”符号的含义:Dot (".") operator and arrow ("->") operator use in C vs. Objective-C

但我仍然不明白这个符号在 Objective-C 中的真正用例是什么?

这是我正在谈论的示例:https ://github.com/gnustep/gnustep-base/blob/master/Source/NSOperation.m - 为什么所有这些字符串(如internal->lock)都写在那里 - 为什么不只是使用 ivars 或点符号吗?


相关主题:object_setClass() 的性能而不是分配 isa 指针

4

2 回答 2

7

从您的问题来看,尚不清楚您是否了解->运营商的工作。

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

至于“为什么不使用点符号?” 显而易见的答案是他们不想通过访问器。通过访问器比直接访问要慢,并且在我们只是使用“哑”内部状态的这种情况下没有真正的好处。

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

于 2013-03-15T19:03:38.953 回答
1

可能是这种情况。我在苹果的 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;
}

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

于 2017-10-26T05:25:26.460 回答