繁体   English   中英

单击导航UIBarButtonItem时收到EXC_BAD_ACCESS信号吗?

[英]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正确识别的那样,问题在于您释放的是您不拥有的东西(根据基本内存管理规则 ,您只能“拥有”通过allocnewcopymutableCopy开头的方法创建的那些东西) 。 删除[rootView release] ,您的问题将消失。

顺便说一句,我建议您通过静态分析器运行代码(在“产品”菜单上选择“分析”,或者按shift + command + B )。 分析仪应生成警告。 此额外release是分析仪可能引起您注意的这类问题的示例。 静态分析器非常擅长于发现各种可能困扰非ARC代码的基本内存管理问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM