我使用下面的代碼多次在我的應用程序(尤其是管理一個NavigationController):何時應該發佈[[UIApplication sharedApplication]委託]對象?
MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
我什麼時候應該釋放呢?
THX幫助,
斯特凡
我使用下面的代碼多次在我的應用程序(尤其是管理一個NavigationController):何時應該發佈[[UIApplication sharedApplication]委託]對象?
MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
我什麼時候應該釋放呢?
THX幫助,
斯特凡
不要。 從不釋放您的應用程序委託 - 它由操作系統自動管理。
如果您查看應用程序的main.m文件,您會看到一些代碼初始化代表您的應用程序的UIApplication
實例 - 它負責管理應用程序委託的生命週期,而不是您的責任。
編輯作爲@Goz所指出的,您還是應該在某些時候,你retain
它release
它。然而,由於應用對象(因此,通過擴展其代表)是保證保持在範圍內的應用程序的生命(除非你去用它搞亂),它遠遠不如干脆不做任何的內存管理對代表,因爲這避免了意外過度釋放或其他相關問題的可能性。
簡短的回答:從來沒有發佈您的應用程序委託。
說明:
它經常幫助我如何解決mem-mgmt問題,當我檢查事物是如何聲明的。看看delegate
屬性如何申報UIApplication
:
@property(nonatomic,assign) id<UIApplicationDelegate> delegate;
正如你所看到的,它是分配財產意義在這裏完成所有MEM-MGMT只是一個實例變量分配指針。這意味着在您的應用程序代理上調用release
將導致您的MyAppDelegate
執行-dealloc
方法。去調試器中試試這個,你會發現你的應用程序會收到EXC_BAD_ACCESS - 即它會崩潰。
編輯:然而,隨着戈茲貝達建議,您可以致電retain
,然後release
。但首先,在應用程序代理上執行此操作是沒有意義的。
我想,從不。 – rptwsthi