Chr*_*ner 2 memory-leaks memory-management objective-c
我只想确认以下是否会导致内存泄漏.
.h文件
@property (nonatomic, retain) MyObject *foo;
Run Code Online (Sandbox Code Playgroud)
.m文件
@synthesize foo;
...
self.foo = [[MyObject alloc] init];
Run Code Online (Sandbox Code Playgroud)
dealloc 设置为
[foo release];
Run Code Online (Sandbox Code Playgroud)
我的理解是自动生成的访问器方法的实现看起来像
-(void)setFoo:(MyObject *)newObject {
if (foo != newObject) {
[foo release];
foo = [newObject retain];
}
}
Run Code Online (Sandbox Code Playgroud)
self.foo = [[MyObject alloc] init];现在走过来读给我看,"分配了一个新的MyObject对象,其保留计数为1,传递给它setFoo:,foo永远不会等于myObject,因为它是新分配的,所以释放旧值,增加newObject的保留计数制作2并将其分配给foo"
dealloc释放foo因此将其retain count设置为1,这意味着该对象被泄露了?
为了安全地做到这一点,我们应该编写我们的代码
self.foo = [[[MyObject alloc] init] autorelease];
Run Code Online (Sandbox Code Playgroud)
我的理解是否正确?
编辑
我意识到这个问题并不适合SO,所以请随意指出一个更好的地方来问这类问题.