代码之家  ›  专栏  ›  技术社区  ›  Chris James

释放对UIApplication委托的引用会导致EXC错误访问,为什么?

  •  0
  • Chris James  · 技术社区  · 14 年前

    MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
    

    [delegate release] . 当我在其中执行此操作的视图控制器将新的视图控制器推送到导航堆栈上时,这将导致EXC错误访问。如果我把这个评论出来,没关系。

    我已经运行了调试器,当代理引用被释放时,它实际上并没有崩溃,而只是当下一个控制器被按下时。

    它不是在声明和发布之间运行的代码,因为我试着对它进行注释,看看会发生什么。

    2 回复  |  直到 14 年前
        1
  •  3
  •   tobiasbayer    14 年前

    delegate 方法不保留对象。所以你不应该负责释放它。您确定静态分析器正在引用这一行代码吗? UIApplication 它本身不保留代理,而是分配代理。

        2
  •  3
  •   Vladimir    14 年前

    在您的代码中,您只获得对应用程序委托对象的引用,而不在任何地方保留它—因此您不应该释放它。

    所以要么静态分析器在这里给出假阳性,要么代码中有其他错误。但是,再一次,考虑到这一行,您不应该释放委托。