2014-01-08 49 views
0

快速問題:在Objective-C中(ReturnClass *)methodName...(ReturnClass)methodName之間的區別?Objective-C中(ReturnClass *)methodName ...和(ReturnClass)methodName ...之間的區別是什麼?

我知道(返回類型*)方法名...返回ReturnClass的實例,而不是(ReturnClass)methodName剛剛返回什麼?

謝謝。

+2

[爲什麼CGSize doesn' t使用\ *當聲明變量?](http://stackoverflow.com/questions/7071616/why-cgsize-doesnt-use-when-declaring-variables) – Joe

回答

4

如果您的ReturnClass是一個對象(很有可能),那麼您不能在沒有*的情況下使用它。你會得到一個編譯錯誤。否則,*是實例指針(基本類型或結構),並沒有*的就是實例本身

編輯:關於指針輝煌解釋從喬:

認爲實例作爲你的房子和指針作爲你的地址。你的房子是一個很大的物品,所以你不必複印你的房子,而是在你開派對時把它傳給你的朋友,你可以給他們你的地址,這樣他們就可以到你家了。現在,如果你有一個小東西,比如傳單,那麼只需複印並傳遞出去,而不是讓每個人都能得到那張紙。將大型對象(房子)視爲Objective-C類或結構體充滿信息,並將小物體(傳單)視爲像int,BOOL,double等原始形式

+0

它不一定是'NSObject'的子類如果它是一個Objective-C類,它需要被一個指針引用。有可能創建其他根類,這就是爲什麼有一個['NSObject'協議](https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/Protocols/NSObject_Protocol/Reference/ NSObject.html#// apple_ref/OCC/INTF/NSObject的)。一個例子是['NSProxy'](https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/classes/NSProxy_Class/Reference/Reference.html)。 – Joe

+0

@Joe謝謝你指出這一點! –

+0

很好的答案!但是現在指向實例的指針和實例本身有什麼區別?我不明白,我已經讀了幾次,而且他們看起來都是一樣的。如果上述情況隨時間而改變,唯一的區別因素是。在第一種情況下,指向該實例的指針也會反映這些更改,而實例本身在進行更改之前傳遞,接收方將不知道更改並顯示舊實例?! – unmircea

相關問題