我確定我錯過了對iOS內存管理的一些基本理解,儘管有大量的閱讀和搜索,但我仍然沒有得到它。iOS單身人士和內存管理
我在我的應用程序中使用了一個包含當前用戶登錄信息,從多個視圖控制器訪問的信息等的單例。它具有多個在應用程序中獲取和設置的ivars。他們在聲明和.h文件有產者像這樣:
NSString *myString;
和由保留像這樣:
@property (non atomic, retain) NSString *myString;
,並在實施synththesized。
我得到和在單這樣的方法設置它們的值:
myString = @"value";
和
methodLocalString = myString;
在其他地方,包括我的單身 - 稱之爲CurrentUser - 我導入它:
#import "CurrentUser.h"
在我得到的單例之外,設置這樣的:
[CurrentUser sharedCurrentUser].myString = @"Bob";
和
myOutsideString = [CurrentUser sharedCurrentUser].myString;
這其中大部分的偉大工程的時候,用值在一個獲取或設置到另一個適當的堅持。麻煩的是,有時當我以這種方式獲得它們時,我發現它們已經被釋放(崩潰應用程序),NSZombieEnabled謝天謝地告訴我。
我不明白的是他會如何發生。我認爲這個單身人士永遠不會被釋放,因此保留單身人士的屬性永遠不會被釋放。我會注意到,這個問題似乎更常見於像NSDate這樣的非真實對象屬性以及不能保留的int和BOOL等絕對非對象屬性,但它也發生在對象屬性中。
我對這裏一無所知?並感謝您的耐心。
很好的問題。等待澄清。 – harshalb 2010-11-19 04:57:49
不要在'NSString'屬性中使用'retain'。使用'copy'。 – 2010-11-19 08:32:51
謝謝你的不在副本上。這應該是所有支持NSCopying的對象,對吧? – 2010-11-19 09:23:31