我有一個針對Apple的LLVM 4.2編譯器(Base SDK 6.1)編譯的庫。其中有對象下標。Objective-C對象下標,iOS5和GCC
想象一下,我的圖書館只有一個類的方法。該方法做到這一點:
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 iOS 5?我猜它必須在某處使用某些宏...如果不編輯我的庫的代碼,是否可以不使用GCC崩潰?
你在設備上還是在模擬器上運行它? – Monolo
@Monolo在設備上。準確地運行5.1.1的iPad 1。 –
是否有一個特殊的原因,您不能使用LLVM編譯器? –