心靈的區別:
// constant pointer
char * const str = "";
// pointer to constant (two equivalent ways)
const char * str = "";
char const * str = "";
const關鍵字應用於適用於任何立即是其左。如果左邊沒有任何東西,它適用於右邊的任何東西。
在Objective-C中,所有的方法參數總是按值傳遞。這包括基元,結構,聯合和指針,以及任何其他組成類型。
請注意,您不能有對象類型的變量。像NSObject o;
這樣的表達式會產生編譯器錯誤消息「接口類型不能靜態分配」。
傳遞對象的唯一方法是傳遞一個指針。該指針作爲值傳遞,但讓方法內的代碼引用該對象並對其進行更改。所以在某種程度上,它是就好像你通過引用傳遞對象(實際上你正在通過值傳遞指針)。
當編譯一個Objective-C程序時,這些方法被轉換成C函數,並且每個「消息發送」(又名「方法調用」,雖然不完全相同)使用運行時函數objc_sendMsg
運行。此功能不知道或關心您是否使用const
來限定對象。如果你想要一個不可變的對象,你必須在對象內編寫這個不可變性。例如:
// const qualifying an object is ignored whether in variables or method arguments:
const NSMutableArray *array = [NSMutableArray new]; // const is ignored
-(void)someMethod:(const NSMutableArray *)array { ... // const is ignored
// calling the methods that mutate the object works fine
[array removeAllObjects];
我搞砸了這句話。 –