2013-02-05 73 views
23

可能重複:
Is there some literal dictionary or array syntax in Objective-C?NSArray的objectAtIndex:速記

我最近注意到一些奇怪的事情似乎在Objective-C的工作。

當我有一個數組,

NSArray *myArray = @[@"1", @"b", @"3", @"d"]; 

我通常可以訪問由第二元件,

NSString *element = [myArray objectAtIndex:1]; // second element 

但是我似乎現在還能夠通過訪問它。

NSString *element = myArray[1]; 

有誰知道這是現在定義的行爲,因此安全使用,還是應該避免它?感謝任何能提供幫助的人!!

+0

對不起,不太清楚如何搜索它。 –

+0

感謝大家的回答! :) –

回答

28

此語法添加到Clang 3.3中:Objective C Literals。本質上,編譯器將objCObj[idx]類型的表達式轉換爲表達式[objCObj objectAtIndexedSubscript:idx]。它也適用於字典,你可以自由地將它用於你自己的對象。假設你將使用Objective C的一個現代版本和適當更新的Objective C編譯器(即Clang),那麼你完全可以安全地使用它。

+0

蘋果已經取消了速記..發生了什麼事*「如果它沒有壞,不解決它」*? – Jacksonkr

4

這是因爲Xcode的4.5

其安全地使用此語法,你甚至可以給自己的類,對此表示支持Objective-C和繳費的一項新功能。

2

雅,使用這些語法是安全的。

這些語法是Modern Objective-C的一部分。

您可以檢查此文章爲更多的選擇:ObjectiveCLiterals

2

這對LLVM編譯器的最新版本完全有效的代碼。 到目前爲止,其他編譯器(例如GCC)無效。

是否應該避免它 - 這是一個品味問題。在互聯網上有很多關於它的大討論,因爲索引的表現略有不同(使用完全不同的方法來實現它)。 也有討論是否使用表達式文字,因爲當使代碼不易讀時(例如它們被寫成文字,但它們實際上是自動釋放對象),則會出現ocassions。請注意,一切都是使用文字完成的,可以使用簡單的宏來完成。