[英]EXC_BAD_ACCESS signal received when clicking navigation a UIBarButtonItem?
我有一个应用程序,试图在其中为聊天应用程序实现LibPusher API。
该API已启用arc,并且已将其包含在我的nonarc项目中。
除了一些警告,它工作正常。
现在我的问题是我在导航栏中添加了一个如下所示的按钮:
UIButton *btnNext1 =[[UIButton alloc] init];
[btnNext1 setBackgroundImage:[UIImage imageNamed:@"back_btn.png"] forState:UIControlStateNormal];
btnNext1.frame = CGRectMake(100, 100,60, 31);
UIBarButtonItem *btnNext =[[UIBarButtonItem alloc] initWithCustomView:btnNext1];
[btnNext1 addTarget:self action:@selector(backButtonClicked) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.leftBarButtonItem = btnNext;
[btnNext1 release];
一切正常,我正在这样做:
PusherPresenceEventsViewController *rootView = ( PusherPresenceEventsViewController*)[self.navigationController.viewControllers objectAtIndex:1];
rootView.newmessage =@"";
[self.navigationController popToViewController:rootView animated:YES];
[rootView release];
前两次也都可以正常工作。
但是,第三次出现错误的访问错误。
我不明白我哪里出了问题,有人可以帮助我吗?
UIButton *btnNext1 = [UIButton buttonWithType:UIButtonTypeCustom]
并不要释放它。也要释放Rootview,因为您没有分配它。
正如iProgrammer正确识别的那样,问题在于您释放的是您不拥有的东西(根据基本内存管理规则 ,您只能“拥有”通过alloc
, new
, copy
和mutableCopy
开头的方法创建的那些东西) 。 删除[rootView release]
,您的问题将消失。
顺便说一句,我建议您通过静态分析器运行代码(在“产品”菜单上选择“分析”,或者按shift + command + B )。 分析仪应生成零警告。 此额外release
是分析仪可能引起您注意的这类问题的示例。 静态分析器非常擅长于发现各种可能困扰非ARC代码的基本内存管理问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.