2013-01-23 210 views

回答

7

NSArray * array = @[];初始化數組之間的區別是做NSArray * array = [NSArray array];

+1

1.與Xcode的版本無關(與使用的語言/標準/編譯器的版本相關,而Xcode不是其中之一)。 2.「和NSString * string = @」「;'」 - 我不這麼認爲。前者創建一個數組,後者創建一個字符串。 – 2013-01-23 15:56:33

+0

一個很好的猜測,但大多數不正確。第一句話是正確的,休息是錯誤的。 – bbum

+0

是的,這是正確的。很快就寫下了我的答案。編輯我的答案。我的錯。 – Mikael

9

@[]的新方式是簡寫:

id a = nil; 
NSArray* array = [NSArray arrayWithObjects:&a count:0]; 

對於所有意圖和目的,這只是[NSArray array]的簡寫。

這是在編譯器的特定版本中添加的功能(並且實際上並不需要運行時支持特定語法)。

這是一點都不像@""速記在@""產生編譯時常並且將導致在運行時沒有消息。事實上,@""(任何@"sequence")是一種特殊情況,它發出的編譯時間常量在運行時用零消息傳遞實現;零動力。 A @"..."與Objective-C類相比,更像一個對象的常規實例。

+0

我認爲@「」會產生一個NSString對象而不是編譯時間常量。 –

+3

不是;它確實是一個編譯時間常量,它通過動態鏈接器加載,就像類和其他編譯時發出的數據一樣。沒有消息涉及。 – bbum