我只是想确认以下是否会导致内存泄漏。
.h file
@property (nonatomic, retain) MyObject *foo;
.m file
@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];
现在读给我来说,“分配了一个新的 MyObject 对象,其保留计数将为 1,将其传递给setFoo:
, foo 永远不会等于 myObject,因为它是新分配的,因此释放旧值,增加 newObject 的保留计数使其成为2并将其分配给 foo”
dealloc 释放 foo 因此将其保留计数设置为1,这意味着这个对象被泄露了?
为了安全地做到这一点,我们应该像这样编写代码
self.foo = [[[MyObject alloc] init] autorelease];
我的理解正确吗?
EDIT
我意识到这个问题不太适合 SO,所以请随时为我指出一个更好的地方来问此类问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)