vds*_*dsf 2 memory-management objective-c
嘿伙计们,假设以下代码:
int main (int argc, const char * argv[])
{
//[...]
Rectangle* myRect = [[Rectangle alloc] init];
Vector2* newOrigin = [[[Vector2 alloc] init] autorelease]; // ref count 1
[newOrigin setX: 50.0f];
[myRect setOrigin: newOrigin]; // ref count 2
[myRect.origin setXY: 25.0f :100.0f]; // ref count goes to 3... why ?
[myRect release];
[pool drain];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Rectangle的原点被声明为(retain)合成属性.只是想知道两件事:
谢谢!
为什么在使用Rectangle的原点的getter访问器时ref count会变为3?
因为@property被声明为atomic(默认值),因此,合成的getter会保留,然后自动释放返回值.
难道我做错了什么 ?
是.您正在研究绝对保留计数.
任何对象的绝对保留计数都非常无用.你只关心三角洲; 如果导致保留计数增加,则必须使其减少.
如果引用计数为3,我不明白这段代码是如何泄漏的.在myRect上调用release将使它降至2,因为我在dealloc()中调用了origin的发布.但是,自动释放什么时候生效?
An autorelease只是一个延迟release,当包含池被drain编辑时就会启动.因此,在您的情况下,对象将在[pool drain];执行时被释放.
| 归档时间: |
|
| 查看次数: |
273 次 |
| 最近记录: |