我有一個使用Admob的應用程序。但由於我支持的iOS 5及以上版本,我要確保我不通過執行以下稱AdMob聯播代碼版本以下的iOS 6:爲什麼不執行下面的代碼會導致它崩潰?
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_5_1) {
int j = 2;
j++; //This is just some code so I can use breakpoints for testing.
NSLog(@"Google Mobile Ads SDK version: %@", [GADRequest sdkVersion]); //Commenting out the line prevents the crash
}
我在iOS 5.1.1測試。現在,如果我註釋掉NSLog,那麼該應用程序可以毫無問題地工作。但是,如果我取消註釋,則應用程序在主方法中幾乎立即崩潰:
int retVal = UIApplicationMain(argc,argv,nil,@「AppController」);
我猜它在註釋掉時不會崩潰,因爲編譯器會因爲未使用而「優化」代碼。但是,確保代碼沒有被使用並且應用程序不會崩潰的正確方法是什麼?
編輯:我編輯的代碼,如果該塊沒有被優化的:
int j = 2;
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_5_1) {
j++; //This is just some code so I can use breakpoints for testing.
NSLog(@"Google Mobile Ads SDK version: %@", [GADRequest sdkVersion]); //Commenting out the line prevents the crash
}else{
j--;
}
NSLog(@"%d",j);
的輸出是「1」,所以在其他塊執行的代碼。所以即使認爲函數調用[GADRequest sdkVersion]
沒有被創建,它爲什麼會崩潰?同樣,如果我註釋掉函數調用,應用程序不會崩潰。
你有一個堆棧跟蹤?您是否嘗試在所有Objective-C異常中設置斷點,以防異常?它在控制檯崩潰時是否會打印任何有用的信息? – newacct