我一直在开发一个应用程序一段时间,现在我已经到了“仪器泄漏”部分。ivars以及如何正确实例化它们的值(iPhone)
我记得有一件事在我学习的几个月前让我对ivars感到困惑。我把所有的事情都放在了信心之上,并且遵循了Apple和其他人的做法。据我所知,由SDK生成的访问器将负责内存管理。
但是,ivars如何初始化?
如果我在我的界面中有这样的ivar;
@interface
{
NSArray *results;
}
@property(nonatomic, retain) NSArray *results;
@end
@implementation
@synthesize results;
如果我在运行时尝试这样做:
[self setResults:allReadyInitializedArray];
它会崩溃,告诉我这个结果对象未初始化。如果我然而这样做:
self.results = [[NSArray alloc] init]; //Im assigning this property memory, but hasn't the SDK already done that?
[self setResults:allReadyInitializedArray];
它会工作,但它会显然泄漏内存。
我的印象是,使用生成的 访问器将释放旧的值,然后设置新的,意思是 上面应该出来的旧值释放和新的+1保留计数。
它是否具体与NSArray/NSMutableArray类型的伊娃有关,我不记得它与其他Ivars一直存在问题。
的问题一直特别突出的在我的XML解析器,在那里我不断地需要设置伊娃值,使用它,覆盖此值,使用新值等
会有人帮我概述正确的方式“从”:@property() - > @synthesize - >使用伊娃 - > dealloc?
我已经阅读了内存管理文档,我试过在我的理解中寻找一些债务文档,但似乎即使我每天都使用ivars,但我不明白后面发生了什么场面。
你在第一次做它的方式看起来正确。你能发布你得到的错误消息的确切文本吗? – kubi 2010-03-01 13:42:19