我什么时候应该发布[[UIApplication sharedApplication]委托]对象?

时间:2011-09-10 08:30:10

标签: iphone ios ios4 uiapplicationdelegate uiapplication

我在我的应用程序中多次使用以下代码(特别是管理NavigationController):

MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 

我该什么时候发布它?

求助,

的Stephane

2 个答案:

答案 0 :(得分:7)

别。 从不发布您的应用程序委托 - 它由操作系统自动管理。

如果您查看应用的main.m文件,您会看到一些代码初始化代表您的应用的UIApplication实例 - 它有责任管理应用代理的生命周期,而不是您的责任。

@Goz指出

编辑,如果你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事情是没有意义的。