【发布时间】:2010-06-17 04:18:25
【问题描述】:
大家好,假设下面的代码:
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;
}
矩形的原点被声明为(保留)合成属性。 只是想知道两件事:
- 为什么在使用 Rectangle 源的 getter 访问器时引用计数变为 3?我做错了什么吗?
- 引用计数为 3,我不明白这段代码的 sn-p 是如何不能泄漏的。因为我在 dealloc() 中调用源上的释放,所以在 myRect 上调用 release 会使其下降到 2。但是,autorelease什么时候生效呢?
谢谢!
【问题讨论】:
标签: objective-c memory-management