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)
这有点麻烦.还有其他选择吗?
你是对的,self.foo = [[MyObject alloc] init];正在泄漏内存。两种选择都是正确的并且可以使用。关于autorelease这样的语句:请记住,当前运行循环结束后,该对象将被自动释放池释放,但它很可能会被保留更长时间self,因此这里不存在内存使用峰值的问题。
| 归档时间: |
|
| 查看次数: |
1575 次 |
| 最近记录: |