一個iOS9 Bug:弄死iPhone很容易
阿新 • • 發佈:2019-01-26
蘋果iOS9推出也有一段時間了,本來以為應該很穩定吧,但事實卻不是這樣。一日將iOS 8上執行得很良好的App在一臺iOS 9.1裝置上除錯,卻發現了很奇葩的問題:不能釋放鍵盤。
跟蹤除錯,發現只要程式碼中一執行到resignFirstResponder(或者是endEditing)方法呼叫的地方,程式就崩潰。出現神一般的BAD EXEC錯誤。
將這句程式碼註釋,一切OK,但是你就無法收起軟鍵盤了。
在網上搜羅答案無數,只有一個答案是靠譜的:
接下來,讓我們來演示一下這個Bug,你就會明白讓一個在iOS 8上執行正常的App崩潰是如此的容易。
新建工程。在View Controller上拖一個TextField和Button。為Button建立一個IBAction連線:
- (IBAction)freekb:(id)sender {
[self.view endEditing:YES];
}
其它程式碼什麼都不要寫。執行程式(在iOS 9.1模擬器或裝置上),點選TextField,鍵盤彈出,點選Button,鍵盤收起。一切OK,沒有任何問題。
現在我們來看怎麼弄死它。實現一個Category,隨便你叫它什麼(比如test):
@implementation UIViewController(test)
- (void)dealloc{
}
@end
如你所見,只定義了一個空的dealloc方法,方法中什麼程式碼也不用寫。
執行程式(在iOS 9.1模擬器或裝置上),點選TextField,鍵盤彈出,點選Button,鍵盤收起。程式崩潰!刪除dealloc方法,再次執行,一切正常。
Ok,演示完畢,謝謝大家!