0

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

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

我应该什么时候释放它?

感谢您的帮助,

斯蒂芬妮

4

2 回答 2

7

不。永远不要释放您的应用程序委托 - 它由操作系统自动管理。

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

正如@Goz 指出的那样编辑,如果在某个时候你应该这样releaseretain。但是,由于应用程序对象(因此,通过扩展它的委托)保证在应用程序的生命周期内保持在范围内(除非你弄乱它),所以最好不要对委托进行任何内存管理,因为这避免了意外过度释放或其他相关问题的可能性。

于 2011-09-10T08:31:24.930 回答
0

简短的回答:永远不要发布您的应用程序委托。

说明:
当我检查事物的声明方式时,它通常可以帮助我解决 mem-mgmt 问题。看看delegate属性是如何声明的UIApplication

@property(nonatomic,assign) id<UIApplicationDelegate> delegate;

如您所见,它被分配了属性,这意味着这里所做的所有 mem-mgmt 只是为实例变量分配指针。这意味着调用release您的应用程序委托将导致-dealloc为您的MyAppDelegate. 去调试器试试这个,你会看到你的应用程序会收到 EXC_BAD_ACCESS - 即它会崩溃。

编辑:但是,正如 Goz 建议的那样,您可以调用retain然后release. retain/release但首先,在应用委托上做这件事是没有意义的。

于 2011-09-10T11:41:10.767 回答