2012-05-28 201 views
1

如果我宣佈一個NSMutableString爲什麼一個對象變量必須是一個指針?

NSMutableString *str_value; 

爲什麼我要聲明這是一個指針(使用*)?如果我不這樣做,我會收到一個編譯錯誤。

有人可以解釋清楚嗎?

+0

than q @viadimir –

+2

對不起,什麼是「可可」?我打算將它改正爲「Cocoa」,但這沒有意義,因爲'NSMutableString str_value;'在Cocoa中是一個錯誤(你只能聲明指向Objective-C對象的指針)。 – JeremyP

+2

使用IRC強烈建議不要在SO上使用英文。 – dasblinkenlight

回答

3

回想一下,目標C是一個超集C.的當聲明的變量,而不用C *,這是一個指示該變量的存儲器爲在自動存儲分配,如果它是一個局部變量,作爲其外部結構的一部分(如果它是結構的成員),或者在靜態存儲器中(如果它是靜態的或全局的)。在函數的參數列表中使用沒有*的typename或結構變量指示按值傳遞。目標C語言的設計者可能採用了類似於Java的路由,使得每個類實例都是一個沒有指針語法的指針,但是Objective C中的程序讀者需要知道名稱是否代表基於structid類型的typedef,以回答關於該類型的對象的最基本問題,例如,如果它通過指針或值隱式傳遞,如果它作爲擁有結構的一部分分配,或者作爲堆對象由結構內的指針指向,等等。

爲了避免這種混淆,Objective C的設計者決定保留id對象的顯式指針語法。

1

指針表示您指向/引用該類。是的,它會導致編譯錯誤,指針的原因主要是內存。一種數據類型(int或BOOL或float等)只有幾個字節,因此不需要有指針。但NSMutableString和其他Objective-C類有很多屬性和方法,並有很多代碼。因此,因爲在你的應用程序中會有很多對象,這會佔用很多內存,從而減慢你的應用程序/降低性能。當然你應該在你製作一個指針後釋放這個對象。

相關問題