我认为新的符号是这样工作的:
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 类别(需要检查它是否尚未定义)