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