我有一個非常奇怪的問題正在進行。定義一個NSString對象時我犯了一個錯誤。這是一個明確的錯誤。但奇怪的是,它可以在一些iOS設備上正常工作,但會導致其他設備崩潰。iOS - NSString定義/初始化。 64位與32位
我已經修復了這個錯誤,但是我仍然處於黑暗中,爲什麼它會工作。
如果有人能幫助我理解這一點,將非常感激。
謝謝!
糟糕的代碼:
NSString *language2 = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString *language = [language substringToIndex:2];
NSLog(@"language = %@", language);
正如你可以看到, 「的NSString *語言= [語言substringToIndex:2]。」被定義爲它自己的一個子字符串。
什麼是瘋狂的是,這在一些設備上工作。我猜這是一個64/32位的東西,我只是不明白。
它在較舊的iPad上崩潰。而在較新的iPhone6上,它可以工作,NSLog指示「language = en」。
任何想法?
謝謝!在看了一下之後,我發現64位設備並沒有崩潰,因爲內存地址是用先前的值填充的,即使這個值不正確,它仍然可以防止導致對象引用錯誤在32位設備上崩潰。感謝您的洞察力。 – mtb
@mtb請注意,如果您打開優化程序或開關優化級別,行爲也可能會發生變化!在這種情況下,編譯器沒有發出警告,我感到有些驚訝。 – bbum