我只想确认以下是否会导致内存泄漏。
.h文件
@property (nonatomic, retain) MyObject *foo;
.m文件
@synthesize foo;
...
self.foo = [[MyObject alloc] init];
dealloc
设置为
[foo release];
我的理解是自动生成访问器方法的实现看起来像
-(void)setFoo:(MyObject *)newObject {
if (foo != newObject) {
[foo release];
foo = [newObject retain];
}
}
遍历 self.foo = [[MyObject alloc] init];
现在对我来说,“分配了一个保留计数为 1 的新 MyObject 对象,将其传递给 setFoo :
,foo 永远不会等于 myObject,因为它是新分配的,所以释放旧值,增加 newObject 的保留计数使其 2 并将其分配给 foo"
dealloc 释放 foo 因此将其保留计数设置为 1,这意味着该对象已泄漏?
为了安全地做到这一点,我们应该编写我们的代码
self.foo = [[[MyObject alloc] init] autorelease];
我的理解正确吗?
编辑
我意识到这个问题不太适合 SO,所以请随意指出一个更好的地方来问这类问题。
最佳答案
是的,那是绝对正确的。
关于objective-c - 使用访问器将属性设置为新分配的对象会导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6024579/