1. 程式人生 > >一個iOS9 Bug:弄死iPhone很容易

一個iOS9 Bug:弄死iPhone很容易

蘋果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,演示完畢,謝謝大家!