什么 - >意思?

时间:2010-12-22 07:58:42

标签: objective-c

我是Objective-C的相对新手(仅研究了Arron Hillegras的书),并且对我在Apple的一个代码示例中发现的以下代码片段感到困惑,特别是 - >意思?

-(id) initWithNumbers:(NSArray *)numbers
{
    self = [super init];
    if (self != nil)
    { 
       self->_numbers = [numbers copy];
    }
    return self;
}

在头文件中,_numbers被声明为

NSNumber * _number;

(下划线有一些重要意义,因为我记得在某处读到的内容,但目前也让我无法理解。

由于 罗宾

5 个答案:

答案 0 :(得分:8)

->是一个普通的C运算符,用于访问结构中指针的成员; .运算符用于访问结构的成员。因此:

a->b

被翻译为

(*a).b

由于Objective-C对象是指向它下面的结构的指针,因此这适用于访问实例变量。

答案 1 :(得分:2)

它通常被称为“箭头”运算符。它允许您使用引用或指向实例的指针来访问对象(或struct)的实例变量。它是C和C ++的通用语法。

我很难找到一个好的写作,但你可能会发现this one信息丰富。

至于下划线 - 通常他们的意思是“私人”;根据{{​​3}}:

  

避免使用下划线   字符作为前缀意味着私人,   尤其是方法。 Apple储备   使用这个惯例。使用方式   第三方可能导致   名称 - 空间碰撞;他们可能   无意中覆盖现有的   私有方法与他们自己的一个,   带来灾难性的后果。

答案 2 :(得分:2)

如果要访问ivar,请使用->。与C结构类似,您将在Objective-C对象中使用.->(在指向结构的指针中),您可以使用->,但这不是必需的,因为您可以直接访问它们。

因此:

self->_numbers = [numbers copy];

_numbers = [numbers copy];

是相同的

如果要明确访问该ivar,则需要使用->

请注意,在Objective-C中,您可以使用.,但仅限于其属性。 无论如何,您都可以使用->

答案 3 :(得分:0)

这表示在这种情况下引用 - 对象的实例变量。 Self指的是对象本身,通过编写self->_numbers,您可以引用属于类的变量而不是名为_numbers的全局变量。

你确定书中没有提到这个吗?

答案 4 :(得分:0)

它是一个源自C编程语言的运算符。而且由于Objective-C与C编程兼容,您可能会看到开发人员使用传统的C风格编程。

“ - >” 中用于访问指针的元素。而且,由于Objective-C中的“对象”只是指针(用*表示),例如NSNumber *号码; ,您可以使用此表示法来访问其元素。

我从未在Objective-C中使用过这种表示法,因为Objective-C中的点符号被接受了。如果“self”具有合成属性“number”,则self.number应与self-> number相同(仅在Objective-C中为true。