我是Objective-C的相对新手(仅研究了Arron Hillegras的书),并且对我在Apple的一个代码示例中发现的以下代码片段感到困惑,特别是 - >意思?
-(id) initWithNumbers:(NSArray *)numbers
{
self = [super init];
if (self != nil)
{
self->_numbers = [numbers copy];
}
return self;
}
在头文件中,_numbers被声明为
NSNumber * _number;
(下划线有一些重要意义,因为我记得在某处读到的内容,但目前也让我无法理解。
由于 罗宾
答案 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。