Objective-C属性和内存管理

Bil*_*ill 5 properties objective-c

给定以下属性定义:

@property (nonatomic,retain) MyObject* foo;
Run Code Online (Sandbox Code Playgroud)

以下代码是否导致内存泄漏:

self.foo = [[MyObject alloc] init];
Run Code Online (Sandbox Code Playgroud)

它看起来像ALLOC呼叫递增对象的保留数为1,则保留里面的属性setter就增加到1.但由于初始计数永远不会递减至0,自我被释放时,对象甚至会留下来.这个分析是否正确?

如果是这样,看起来我有两个选择:

self.foo = [[[MyObject alloc] init] autorelease];
Run Code Online (Sandbox Code Playgroud)

出于性能原因,不建议在iPhone上使用,或者:

MyObject* x = [[MyObject alloc] init];
self.foo = x
[x release];
Run Code Online (Sandbox Code Playgroud)

这有点麻烦.还有其他选择吗?

MrM*_*age 2

你是对的,self.foo = [[MyObject alloc] init];正在泄漏内存。两种选择都是正确的并且可以使用。关于autorelease这样的语句:请记住,当前运行循环结束后,该对象将被自动释放池释放,但它很可能会被保留更长时间self,因此这里不存在内存使用峰值的问题。