释放对UIApplication代表的引用导致EXC BAD ACCESS,为什么?

时间:2010-08-17 11:11:52

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

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

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

在代码之后我做[delegate release]。当我正在执行此操作的视图控制器将新视图控制器推入导航堆栈时,这会导致EXC BAD ACCESS。如果我发表评论,那很好。

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

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

2 个答案:

答案 0 :(得分:3)

在您的代码中,您只需获得对应用程序委托对象的引用,而不是将其保留在任何位置 - 因此您不应该将其释放。

因此,静态分析器在这里给出误报,或者在代码中有一些其他错误。但是,再一次,考虑到这一行,你不应该释放代表。

答案 1 :(得分:3)

调用delegate方法不会保留对象。所以你不应该负责释放它。您确定静态分析器是否引用了这一特定的代码行? UIApplication本身不会保留,但会分配代理人。