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

我在我的应用程序中多次使用以下代码(尤其是管理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操作是没有意义的。