2011-08-26 64 views
1

我正在學習Objective C在iOS上編程。 我知道它與指針有關,我不明白。 我不知道什麼是創建一個字符串(或任何NSObject)這樣的區別:何時寫「NSString * str」或「NSString str」?

NSString place = ...; 
or 
NSString *place = ...; 

感謝您的幫助!

+1

您需要了解的指針。停止你在做什麼,並閱讀[this](http://boredzo.org/pointers/)。 –

回答

5

NSString是一個類,因此聲明爲NSString *str的類的實例必須始終聲明爲指針(因爲對象實例只能通過指向對象結構的指針訪問)。所以這個聲明是非法的:NSString str

14

從不NSString str。期。所有Obj-C對象實際上都是C指針。

+2

這是正確的,但也有很多以「NS」開頭的非NSObjects的類型名稱。如果它在Cocoa文檔中被列爲typedef,比如'NSRect'或者'NSUInteger',你可能不需要使用指針。 – mckeed

0

的Objective-C是,在某種意義上,更像是一種腳本語言。類定義在運行時保持不變,並且可以修改。在objc.h中有一個到類定義系統的C接口。即使是系統類也可以修改,儘管這樣做不是一個好主意。正因爲如此,所有Objective-C對象都必須在運行時創建並通過指針訪問。換句話說,編譯器無法知道在編譯時對象應該是什麼樣子。這也是爲什麼「對象可能不響應選擇器」是一個警告,而不是一個錯誤,並在其中包含「可能」一詞。