2010-05-14 71 views
1

如果我可以快速提出問題:我只是對以下內容感到好奇(見下文)Xcode說「初始化元素不是常數」爲什麼這不起作用,我猜它是NSArray ...初始化器不是恆定的?

static NSArray *stuffyNames = [NSArray arrayWithObjects:@"Ted",@"Dog",@"Snosa",nil]; 

and this確實...

static NSString *stuffyNames[3] = {@"Ted",@"Dog",@"Snosa"}; 

gary

+0

非常感謝,謝謝大家... – fuzzygoat 2010-05-14 13:33:41

回答

4

它,因爲你叫的方法(+ arrayWithObjects)返回數據 - 雖然結果是不可改變的,它實際上是動態生成的數據。

3

靜態局部變量初始化爲編譯時間,所以它們的初始值設定項也必須在編譯時知道,這在第一個例子中顯然不是真的。

靜態變量可以在其聲明中初始化爲 ;但是, 初始值設定項必須爲常量 表達式,初始值爲 在編譯時只能執行一次,因爲 內存被分配給靜態 變量。

and more on static variables。

3

是的,這是NSArray。想想編譯時會發生什麼。

在第二種情況下,它具有所需的所有信息。它有三個NSString常量和一個C風格的數組來放入它們。

在你的第一行中,你有一個帶有四個參數的類方法的調用,所有這些參數都是常量。就編譯器而言,NSArrayUIApplication沒有區別。這是一個有參數的課程。你和我知道這是一個數組,但是它的實現在基礎庫中,而不是該語言的核心部分。