我在我的应用程序中多次使用以下代码(尤其是管理 NavigationController):
MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
我应该什么时候释放它?
感谢您的帮助,
斯蒂芬妮
我在我的应用程序中多次使用以下代码(尤其是管理 NavigationController):
MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
我应该什么时候释放它?
感谢您的帮助,
斯蒂芬妮
不。永远不要释放您的应用程序委托 - 它由操作系统自动管理。
如果您查看应用程序的 main.m 文件,您会看到一些代码初始化UIApplication
代表您的应用程序的实例 - 管理应用程序委托的生命周期是其责任,而不是您的责任。
正如@Goz 指出的那样编辑,如果在某个时候你应该这样release
做retain
。但是,由于应用程序对象(因此,通过扩展它的委托)保证在应用程序的生命周期内保持在范围内(除非你弄乱它),所以最好不要对委托进行任何内存管理,因为这避免了意外过度释放或其他相关问题的可能性。
简短的回答:永远不要发布您的应用程序委托。
说明:
当我检查事物的声明方式时,它通常可以帮助我解决 mem-mgmt 问题。看看delegate
属性是如何声明的UIApplication
:
@property(nonatomic,assign) id<UIApplicationDelegate> delegate;
如您所见,它被分配了属性,这意味着这里所做的所有 mem-mgmt 只是为实例变量分配指针。这意味着调用release
您的应用程序委托将导致-dealloc
为您的MyAppDelegate
. 去调试器试试这个,你会看到你的应用程序会收到 EXC_BAD_ACCESS - 即它会崩溃。
编辑:但是,正如 Goz 建议的那样,您可以调用retain
然后release
. retain/release
但首先,在应用委托上做这件事是没有意义的。