新しい表記法は次のように機能すると思いました。
someArray[5] は次のようになります
someArray[5] は実際には [someArray objectAtIndexedSubscript:5] に変わります
ただし、 NSArray.h と NSOrderedSet.h でこれを見ました:
- (id)objectAtIndexedSubscript:(NSUInteger)idx NS_AVAILABLE(10_8, 6_0);
したがって、objectAtIndexedSubscript は IOS6 でのみ使用できます。
この簡単なコードを作成してみました:
NSArray * someArray =@[@"hello",@"World",@"World"];
NSOrderedSet * someOS = [NSOrderedSet orderedSetWithArray:someArray];
PO(someArray);
PO(someOS);
PO(someArray[0]);
PO(someOS[0]); //Exception thrown here
someOS[0] でのコード ブレーク
-[__NSOrderedSetI objectAtIndexedSubscript:]: unrecognized selector sent to instance 0x8b1fac0
NSArray と NSOrderedSet の両方に、テキスト NS_AVAILABLE(10_8, 6_0); があります。
それでも、NSArray では壊れませんが、NSOrderedSet では壊れます。なんで?
ボーナス: カテゴリを使用して NSOrderedSet でも機能させるにはどうすればよいですか (まだ定義されていないことを確認する必要があります)