关于Use Automatic Reference Counting引发EXC_BAD_ACCESS Bug的问题
经过这几天objective-c的学习,感觉对iOS的开发有点儿了解了,所以想用uikit写个hello world程序,坚定一下自己的自信心。结果没想到本来以为毫无悬念,有点儿多余的代码,让我折腾了一上午。在这里贴出来,或许有来往客观给指点一二。
重现过程
我的XCode版本是4.5,项目内容很简单,就是用xib创建一个文本框和一个按钮。点击按钮后,用alert弹出文本框中的内容。
代码大致如下:
@interface HomePage : UIViewController @property(nonatomic, retain) IBOutlet UITextField *txtTitle; @property(nonatomic, retain) IBOutlet UIButton *btnSubmit; -(IBAction)txtTitleAction:(id)sender; -(IBAction)btnSubmitAction:(id)sender; @end // 实现代码 @implementation HomePage @synthesize txtTitle, btnSubmit; -(IBAction)txtTitleAction:(id)sender { self.txtTitle.text = @""; } -(IBAction)btnSubmitAction:(id)sender { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:self.txtTitle.text delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定", nil]; [alertView show]; }
界面与变量和action的关联如图所示:
运行没有错误,但是如果执行上面的action就是报EXC_BAD_ACCESS错误。如下图所示:
解决方法
如上图所示的错误让我纠结了好久,找不出问题出在哪里,调试似乎也无从下手。百度了好久,找到了这篇日志:http://my.oschina.net/ldaga/blog/59202?p=1。经过测试发现,这个博客中写的很对,都是Use Automatic Reference Counting惹的祸。
在工程设置中,将Objective-C Automatic Reference Counting、Objective-C Automatic Reference Counting ABI incompatibilities、Using __bridge casts outside of ARC 这几个选项都设置为 NO,将项目重新编译,问题解决。
总之,珍爱生命,不要使用自动释放内存……
0.unrecognized selector sent to instance:
1、向一个已释放对像发送信息2、向一个不存在的对像发送信息,特别注意,有参数的方向法名要加":"号(@seletor(dosomething:))

immutable object(不可改变的变量):
明白了吧?比如将NSMutableArray的方法用在NSArray上就会报这个错误。