有人請澄清這兩個片段的區別是什麼?這個Objective-C語法的含義是什麼?
我知道這是實例:
Class *myClass = [[Class alloc] init] ....etc
但究竟這是什麼原因?
(Class *)myClass .....etc
感謝
有人請澄清這兩個片段的區別是什麼?這個Objective-C語法的含義是什麼?
我知道這是實例:
Class *myClass = [[Class alloc] init] ....etc
但究竟這是什麼原因?
(Class *)myClass .....etc
感謝
的第一個,給正確的語法實例,就像你說的。
第二個是將一個變量「myClass」投射到一個指向Class對象實例的指針。
第二個片段是一個強制類型或一個方法的參數。與實例化沒有任何關係。
如果(Class *)myClass
發生在方法聲明中,它只是定義該方法的參數應該是什麼類型。例如,- (void) method:(Class *)myClass
是一種返回void並帶有一個參數的方法,類型爲Class*
。
如果(Class *)myClass
發生在其他代碼中,則爲cast。基本上它說要重新解釋myClass
作爲指向Class
類型的對象的指針,而不管它的類型是什麼。這就像使用數字進行投射 - 如果x
是int
,則(float)x
會將其轉換爲float
,以便您可以在浮點運算中使用它。
一般來說,我會提醒你不要在Objective-C對象中大量使用Cast。一個你會看到這樣的事情的地方是將NS對象轉換爲CF對象,如(CFURLRef)[NSURL fileURLWithPath:path]
。但大多數情況下,不同類型的對象不能正確投射。
此外,您的第一個片段中有錯誤。它實際上是[[Class alloc] init]
。您必須致電alloc
,然後init
。而且[init]
是沒有意義的 - 它根本不符合Objective-C的語法[object method]
。
第二個片段是C風格演員。它有效地告訴編譯器將myClass視爲類型爲Class *的值,而不管其聲明類型。如果沒有其他的片段(以及myClass的前面的聲明),就不可能說出爲什麼要使用演員或者演出會有什麼效果。