一个iOS9 Bug:弄死iPhone很容易
2015-11-01 11:56
411 查看
苹果iOS9推出也有一段时间了,本来以为应该很稳定吧,但事实却不是这样。一日将iOS 8上运行得很良好的App在一台iOS 9.1设备上调试,却发现了很奇葩的问题:不能释放键盘。
跟踪调试,发现只要代码中一运行到resignFirstResponder(或者是endEditing)方法调用的地方,程序就崩溃。出现神一般的BAD EXEC错误。
将这句代码注释,一切OK,但是你就无法收起软键盘了。
在网上搜罗答案无数,只有一个答案是靠谱的:
http://www.dahuatu.com/1LypEbbMmn.html
接下来,让我们来演示一下这个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,演示完毕,谢谢大家!
跟踪调试,发现只要代码中一运行到resignFirstResponder(或者是endEditing)方法调用的地方,程序就崩溃。出现神一般的BAD EXEC错误。
将这句代码注释,一切OK,但是你就无法收起软键盘了。
在网上搜罗答案无数,只有一个答案是靠谱的:
http://www.dahuatu.com/1LypEbbMmn.html
接下来,让我们来演示一下这个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,演示完毕,谢谢大家!
相关文章推荐
- iOS动画效果和实现
- 我的iOS一年半经验
- Des 加密处理 iOS 和 安卓 与服务器 处理时 遇到的 补位问题
- iOS沙盒机制 、对象写入及读取
- iOS initWithCoder, initWithFrame那些事儿
- IOS实用技术之手势缩放图片
- iOS自定义转场动画(2)——自定义Pop转场动画并加入手势驱动
- iOS 中利用 Masonry 进行代码适配的基本方法
- iOS 开发知识点
- ios响应者链条
- iOS 通讯录访问(代码块的)
- IOS应用的启动过程与生命周期
- iOS block详解学习
- xcode 如何获得ios模拟器下载地址
- iOS RSA加密用OpenSSL
- iOS 多线程: 正确认识 GCD 队列类型
- ios中实现staggeringBeauty的效果(二)
- iOS设计模式 - 享元
- ios 多线程
- iOS开发小技巧(二)