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