24

重複の可能性:
Objective-C にはリテラル辞書または配列構文がありますか?

私は最近、objective-c で奇妙なことが機能しているように見えることに気付きました。

私が配列を持っているとき、

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

通常、次の方法で 2 番目の要素にアクセスできます。

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

ただし、経由でアクセスできるようになりました。

NSString *element = myArray[1];

これが現在定義されている動作であり、したがって安全に使用できるかどうか、または回避する必要があるかどうかは誰にもわかりますか? 助けてくれる人に感謝します!!

4

4 に答える 4

29

この構文は Clang 3.3: Objective C Literalsで追加されました。objCObj[idx]基本的に、コンパイラは型の式を式に変換します[objCObj objectAtIndexedSubscript:idx]。辞書にも機能し、独自のオブジェクトに自由に採用できます。

そのため、Objective C の最新バージョンと適切に更新された Objective C コンパイラ (つまり Clang) を使用していると仮定すると、完全に安全に使用できます。

于 2013-02-05T13:48:36.290 に答える
4

これは Objective-C の新機能であり、xCode 4.5 以降で利用可能です。

この構文を使用しても安全です。独自のクラスにこれをサポートさせることもできます。

于 2013-02-05T13:48:57.070 に答える
2

はい、これらの構文を使用しても安全です。

これらの構文は、ModernObjective-Cの一部です。

その他のオプションについては、この記事を確認してください:ObjectiveCLiterals

于 2013-02-05T13:51:08.637 に答える
2

これは、最新バージョンの LLVM コンパイラに対して完全に有効なコードです。これまでのところ、他のコンパイラ (GCC など) では無効です。

避けるべきかどうかは、好みの問題です。インデックス作成の動作がわずかに異なるため(実装にはまったく異なる方法が使用されます)、インターネット上でいくつかの大きな議論があります。また、式リテラルを使用するかどうかについても議論があります。これは、コードが読みにくくなる場合があるためです (たとえば、リテラルのように書かれていますが、実際には自動解放されたオブジェクトです)。リテラルを使用してすべてを行うことは、単純なマクロを使用して行うことができることに注意してください。

于 2013-02-05T13:53:25.577 に答える