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

时间:2012-10-22 13:44:02

标签: iphone ios ipad

我有一个应用程序,我正在尝试为聊天应用程序实现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];

前两次也正常工作 但是,它第三次出现了错误的访问错误 我不明白我哪里出错了,有人能帮助我吗?

2 个答案:

答案 0 :(得分:3)

UIButton *btnNext1 =    [UIButton buttonWithType:UIButtonTypeCustom]

并且不要发布它。也可以释放Rootview,因为你没有分配它。

答案 1 :(得分:3)

正如iProgrammer正确识别的那样,问题是你发布了一些你不拥有的东西(根据basic memory management rules,你只拥有“你自己”通过alloc开头的方法创建的东西。 ,newcopymutableCopy)。移除[rootView release],您的问题就会消失。

顺便提一下,我建议通过静态分析器运行代码(在“产品”菜单上选择“分析”,或按 shift + 命令 + )。您应该有分析器生成的警告。这个额外的release是分析器可能引起您注意的那种问题的一个例子。静态分析器非常适合发现各种基本的内存管理问题,这些问题往往会困扰非ARC代码。