我見過這個操作符在「學習Objective-C在Mac上」的示例代碼中彈出了好幾遍。目標C中的「 - >」是什麼?
我相信它是Objective C繼承的C語言的操作符。 我試着谷歌搜索堆棧溢出和奇怪的沒有出現。
它有英文名嗎?
我見過這個操作符在「學習Objective-C在Mac上」的示例代碼中彈出了好幾遍。目標C中的「 - >」是什麼?
我相信它是Objective C繼承的C語言的操作符。 我試着谷歌搜索堆棧溢出和奇怪的沒有出現。
它有英文名嗎?
它與結構有關。
當我們在棧上本地有一個結構體時,我們使用.
運算符訪問它的成員。例如:
CGPoint p = CGPointMake(42,42);
NSLog(@"%f", p.x);
然而,如果我們替代地具有指針到的結構中,我們必須使用->
操作符:
CGPoint *p = malloc(1*sizeof(CGPoint));
p->x = 42.0f;
NSLog(@"%f", p->x);
free(p);
這是一個部件選擇(或訪問)相當於一個指針去參考(如在評論中指出)
a->member
等同於C/C++
作爲上述的必然結果,它與C中的一樣。 – jer 2010-12-20 00:47:57
我認爲downvote是因爲你說它是一個指針去引用,而實際上指針去引用運算符是通常的'*' ; C99標準將它稱爲「成員訪問操作符」,即點('.')(第6.6.9節)。我只是說這是'(* a).Member'記號的簡寫。 – 2010-12-20 00:50:07
+1,因爲它是正確的。 – 2010-12-20 00:50:14
->
(*a).member
是不特定於Objective-C的。這是一個C運營商。
現在已清除,它是成員訪問操作符,相當於指針解引用,然後對結果使用點運算符。
假設您有一個struct
這樣的:
typedef struct Person {
char *name;
} Person;
Person *jacob = malloc(1*sizeof(Person));
所以這樣的說法:
jacob->name = "Jacob";
等效於此聲明:
(*jacob).name = "Jacob";
當然,不要忘了free
:
free(jacob);
當你說它相當於*時,它並不是真的。這相當於取消引用然後訪問使用。 – 2010-12-20 00:51:38
@米奇,不,我其實就是這個意思。 – 2010-12-20 00:53:11
也許創建一個Person結構,然後賦值,以獲得完整的正確性。 – 2010-12-20 00:54:45
a->b
相當於(*a).b
,並且指定的構件b
由a
指向的對象。
在C標準中,它被稱爲「結構/聯合指針操作符」,它不是真正的最後名稱。
在C
a->b
爲
(*a).b
快捷這對於指向一個結構的成員的解引用。
這很有用,因爲。綁定比解引用操作符*強。所以通過使用 - >避免使用這些醜陋的括號。
這是「間接成員訪問運營商」。它是一個C運算符,Objective-C和C++都繼承了它。
這
a->b
等同於:
(*a).b
,但打字少。 (由於優先級爲*
和.
,擴展表單中需要父元素。)
這是所有人都說過的,它是訪問結構指針成員的快捷方式,但只是添加一個說明,您可以訪問ivars使用相同的語法由於Objective-C的運行時的工作方式:
@interface Foo : NSObject {
NSString *something;
}
/* ... SNIP ... */
NSLog(@"something = %@", foo->something); // Where foo is an instance of the Foo class
這是非常方便,當你需要訪問不是由方法暴露的ivars;特別是當您需要在您的對象上實現copyWithZone:
時。
多數民衆贊成在確定,但你能告訴我這是什麼意思。 loginViewController-> mPortSIPSDK = mPortSIPSDK; 第一個mportSIPSDK是在loginviewcontroller中聲明的PORTSIPSDK的實例。第二個是ie(= mPortSIPSDK)在aoodelegate中聲明。 – 2013-12-09 06:20:29
The same thing that it means in C。它可以用來直接訪問對象的實例變量,但通常這不是最佳實踐。你所指的點符號是property,而不是通常的C點符號。
可能有趣的是,'self-> bla'(或普通的'bla')直接訪問伊娃,而'self.bla'通過屬性訪問器訪問伊娃。 – 2011-08-20 07:30:08
是的,這是我的答案中隱含的。尤其是,您不能使用'self.bla'來訪問實例變量,因爲'self'是指向內存中對象的指針。這就是爲什麼你必須使用' - >'。這就是爲什麼C點符號和Obj-C屬性之間沒有衝突的原因:) – jtbandes 2011-08-20 07:31:55
jtbandes:的確如此。 – 2011-08-20 07:45:19
我們不需要,我們可以使用'(* p).x'代替。 – jer 2010-12-20 01:13:17
@jer肯定,但我認爲'p-> x'比'(* p).x'更容易閱讀。 – 2010-12-20 04:43:49