我确定我错过了对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