[英]What is the difference between '->' (arrow operator) and '.' (dot operator) in Objective-C?
在 Objective-C 中,使用->
(箭頭運算符)和訪問 class 中的變量有什么區別.
(點運算符)? 是->
用於直接訪問 vs 點( .
)不是直接的嗎?
->
是傳統的 C 運算符,用於訪問指針引用的結構的成員。 由於 Objective-C 對象(通常)用作指針和 Objective-C class 是一個結構,您可以使用->
訪問其成員,這(通常)對應於實例變量請注意,如果您嘗試從 class 外部訪問實例變量,則必須將實例變量標記為公共。
因此,例如:
SomeClass *obj = …;
NSLog(@"name = %@", obj->name);
obj->name = @"Jim";
訪問在SomeClass
(或其超類之一)中聲明的實例變量name
,對應於 object obj
。
另一方面, .
(通常)用作 getter 和 setter方法的點語法。 例如:
SomeClass *obj = …;
NSLog(@"name = %@", obj.name);
等效於使用 getter 方法name
:
SomeClass *obj = …;
NSLog(@"name = %@", [obj name]);
如果name
是已聲明的屬性,則可以為其 getter 方法指定另一個名稱。
點語法也用於 setter 方法。 例如:
SomeClass *obj = …;
obj.name = @"Jim";
相當於:
SomeClass *obj = …;
[obj setName:@"Jim"];
箭頭->
是點與指針解引用結合的簡寫,這兩個對於某些指針p
是相同的:
p->m
(*p).m
箭頭符號是從 C 和 C 繼承的,因為結構成員訪問運算符 ( .
) 綁定比指針解引用運算符 ( *
) 更松散,沒有人想一直寫(*p).m
也不想寫更改運算符優先級以使人們編寫*(pm)
以取消引用結構內的指針。 因此,添加了箭頭,這樣您就可以明智地執行p->m
和*sp
而不會出現括號的丑陋。
當您使用箭頭運算符ptr->member
時,它會隱式取消引用該指針。 它相當於(*ptr).member
。 當您向 object 指針發送消息時,該指針也被隱式取消引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.