Ios 选项卡栏问题:-[UILayoutContainerView哈希]:发送到解除分配实例的消息

Ios 选项卡栏问题:-[UILayoutContainerView哈希]:发送到解除分配实例的消息,ios,objective-c,iphone,cocoa-touch,debugging,Ios,Objective C,Iphone,Cocoa Touch,Debugging,我似乎在释放标签栏本身、导航控制器或???之类的东西,当我转到特定的视图控制器,然后点击标签栏到特定的标签时就会发生这种情况(例如,如果我点击中间的标签,共3个标签,没问题,但如果我点击最右边的标签,我就会崩溃)。我的程序基本上已经完成了,在这一点上我有一个相当大的代码库。有人对调试这个有什么建议吗?我一直等到现在才开始做这个。我的意思是,查看dealoc例程和相邻代码中的任何版本。你能推荐的“手册”之外的东西吗?谢谢 在不知道更多的情况下,我会这样做 在日志查看器中,在gdb中发生异常后键入b

我似乎在释放标签栏本身、导航控制器或???之类的东西,当我转到特定的视图控制器,然后点击标签栏到特定的标签时就会发生这种情况(例如,如果我点击中间的标签,共3个标签,没问题,但如果我点击最右边的标签,我就会崩溃)。我的程序基本上已经完成了,在这一点上我有一个相当大的代码库。有人对调试这个有什么建议吗?我一直等到现在才开始做这个。我的意思是,查看dealoc例程和相邻代码中的任何版本。你能推荐的“手册”之外的东西吗?谢谢

在不知道更多的情况下,我会这样做

  • 在日志查看器中,在gdb中发生异常后键入backtrace。希望,这将给你一条精确的线,显示哪个对象被释放了太多次

  • 查找此对象的引用,并查看是否可以通过检查找到不必要的释放、自动释放等。您不能释放/自动释放您的执行路径不拥有的任何内容(通过alloc)


  • 您可能会幸运地打印出此对象的保留计数(通过将retainCount消息发送到有问题的对象)。尽管开发人员的文档强烈表明这是毫无意义的,也没有成效的,但我发现,当我意外释放某些内容时,有时可以帮助我缩小范围。

    使用上述调试解决:1)使用-(void)viewDidLoad而不是加载nib加载的视图控制器的加载视图。2) 还更改了:UIView*contentView=[self.navigationController视图];self.view=contentView;[内容视图发布];to:self.view=[self.navigationController视图];很抱歉格式不好,但该网站希望我对“已回答的问题”发表评论。您对第2点的更改是有意义的。由于contentView的UIView未被分配,因此代码路径不属于它。因此,[contentView release]消息是无关的。干得好谢谢Hyuan。其他人(以前是“放手”)写了这句话,我想知道为什么会有一个没有alloc的版本!举例说明你的#2:“看看你是否能在你的建议中找到不必要的释放”。谢谢你的面包屑。