2011-08-12 50 views

回答

1

的第一個,給正確的語法實例,就像你說的。

第二個是將一個變量「myClass」投射到一個指向Class對象實例的指針。

2

第二個片段是一個強制類型或一個方法的參數。與實例化沒有任何關係。

如果(Class *)myClass發生在方法聲明中,它只是定義該方法的參數應該是什麼類型。例如,- (void) method:(Class *)myClass是一種返回void並帶有一個參數的方法,類型爲Class*

如果(Class *)myClass發生在其他代碼中,則爲cast。基本上它說要重新解釋myClass作爲指向Class類型的對象的指針,而不管它的類型是什麼。這就像使用數字進行投射 - 如果xint,則(float)x會將其轉換爲float,以便您可以在浮點運算中使用它。

一般來說,我會提醒你不要在Objective-C對象中大量使用Cast。一個你會看到這樣的事情的地方是將NS對象轉換爲CF對象,如(CFURLRef)[NSURL fileURLWithPath:path]。但大多數情況下,不同類型的對象不能正確投射。

此外,您的第一個片段中有錯誤。它實際上是[[Class alloc] init]。您必須致電alloc,然後init。而且[init]是沒有意義的 - 它根本不符合Objective-C的語法[object method]

0

第二個片段是C風格演員。它有效地告訴編譯器將myClass視爲類型爲Class *的值,而不管其聲明類型。如果沒有其他的片段(以及myClass的前面的聲明),就不可能說出爲什麼要使用演員或者演出會有什麼效果。