2010-08-17 70 views
0

我正在通过Xcode的静态分析我的应用程序,它指出,我在一个文件中有一个潜在的泄漏:释放对UIApplication委托的引用会导致EXC BAD ACCESS,为什么?

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

因此,代码后,我做[delegate release]。这导致了一个EXC BAD ACCESS,当视图控制器我这样做时,将一个新的视图控制器推入导航堆栈。如果我对此发表评论,那很好。

我已经运行调试器,并且它在委托参考发布时并没有真正崩溃,而是在下一个控制器被推入时。

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

回答

3

调用delegate方法不保留该对象。所以你不应该负责释放它。你确定静态分析器正在引用这个特定的代码行吗? UIApplication本身不保留但分配代表。

+0

是的,它是下面的行。那会教我不要戴眼镜,欢呼! – qui 2010-08-17 11:38:55

3

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

因此,无论是静态分析仪在这里给出了误报还是在代码中还有其他一些错误。但是,再次考虑这一行,你不应该释放委托。