【问题标题】:Releasing reference to UIApplication's delegate results in EXC BAD ACCESS, why?释放对 UIApplication 委托的引用导致 EXC BAD ACCESS,为什么?
【发布时间】:2010-08-17 11:11:52
【问题描述】:

我正在通过 xcode 的静态分析器运行我的应用程序,它指出我的文件中存在潜在泄漏:

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

所以在代码之后我做[delegate release]。当我正在执行此操作的视图控制器将新的视图控制器推送到导航堆栈时,这会导致 EXC BAD ACCESS。如果我把它注释掉,那很好。

我已经运行了调试器,它实际上并没有在释放委托引用时崩溃,而是在推送下一个控制器时崩溃。

这不是在声明和发布之间运行的代码,因为我尝试将其注释掉以查看会发生什么。

【问题讨论】:

    标签: iphone objective-c exc-bad-access


    【解决方案1】:

    调用delegate 方法不会保留对象。所以你不应该负责发布它。您确定静态分析器正在引用此特定代码行吗? UIApplication 本身不保留而是分配委托。

    【讨论】:

    • 是的,就是下面这行。那会教我不要戴眼镜,干杯!
    【解决方案2】:

    在您的代码中,您只是获得对应用程序委托对象的引用,并且不会在任何地方保留它 - 所以您不应该释放它。

    因此,要么静态分析器在这里给出误报,要么代码中存在其他错误。但是,再次考虑到这一行,您不应该释放委托。

    【讨论】:

      猜你喜欢
      • 2011-11-29
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多