我正在通过xcode的静态分析器运行我的应用程序,它指出我的文件中存在潜在的泄漏:
MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
在代码之后我做[delegate release]
。当我正在执行此操作的视图控制器将新视图控制器推入导航堆栈时,这会导致EXC BAD ACCESS。如果我发表评论,那很好。
我已经运行了调试器,并且在释放委托引用时实际上并没有崩溃,而是在推送下一个控制器时。
这不是在声明和发布之间运行的代码,因为我尝试将其注释掉,看看会发生什么。
答案 0 :(得分:3)
在您的代码中,您只需获得对应用程序委托对象的引用,而不是将其保留在任何位置 - 因此您不应该将其释放。
因此,静态分析器在这里给出误报,或者在代码中有一些其他错误。但是,再一次,考虑到这一行,你不应该释放代表。
答案 1 :(得分:3)
调用delegate
方法不会保留对象。所以你不应该负责释放它。您确定静态分析器是否引用了这一特定的代码行? UIApplication
本身不会保留,但会分配代理人。