我有一个针对 Apple 的 LLVM 4.2 编译器(Base SDK 6.1)编译的库。其中有对象下标。
想象一下,我的库只有一个类和一种方法。该方法执行此操作:
NSLog(@"****** preTests");
NSDictionary *dictTest = @{ @1 : @1 };
NSLog(@"Initialized Dictionary");
NSArray *arrayTest = @[ @1, @2, @3 ];
NSLog(@"Initialized Array");
NSLog(@"****** arrayTest[1] = %@", arrayTest[1]); // First use of subscripting
NSLog(@"****** dictTest[@1] = %@", dictTest[@1]);
现在我创建了一个新项目并将这个库链接到其中。在我的应用程序委托中,我调用了这个方法。我使用GCC LLVM 4.2编译器编译这个应用程序。它编译和链接很好。
此应用程序将在 iOS 6+ 上正常运行。此应用程序将在 iOS 5 上的“首次使用下标”(上图)处崩溃。
2013-07-03 09:15:51.050 GCCTest[167:707] -[__NSArrayI objectAtIndexedSubscript:]: unrecognized selector sent to instance 0x381fb0
用Apple LLVM 4.2 编译器编译,就可以正常运行了。
objectAtIndexedSubscript:
是一种在 iOS 6 中公开可用的方法,据我了解,它的语法糖myArray[0]
被翻译成什么。
有人可以帮助我理解为什么我看到 GCC 崩溃而不是 Apple 与 iOS 5 崩溃吗?我猜它与某处的某些宏有关......如果不编辑我的库的代码,这是否可以不与 GCC 一起崩溃?