通过赋值自动释放先前的对象

时间:2010-06-29 01:19:15

标签: iphone memory-management autorelease

如果我有这样的功能

void setSomeObject( SomeObjectClass obj /*, and some other params*/ )
{
  [_previous autorelease];
  _previous = obj;
}

据我了解,autorelease消息被发送到对象本身(不是_previous) 所以有一次,当setSomeObject超出范围时,原始对象会被自动释放(如果有的话)。它是否正确?我没有使用属性,但我想通过使用它们,当我执行 self.previous = obj; 时会自动释放上一个对象?

2 个答案:

答案 0 :(得分:1)

当您向对象发送-autorelease消息时,它会被添加到活动NSAutoreleasePool,当运行循环运行时,它将被清空。如果您说[_previous autorelease],则只会自动释放该对象,如果您说_previous = obj,则只会更改变量的引用。旧对象仍然是自动释放的。

如果你在setter方法中这样做,这就是模式通常是:

- (void)setSomeObject:(MyObjClass *obj) {
    if (obj != someObject) {
        [someObject release];
        someObject = [obj retain]; // or copy, depending on what you want
    }
}

答案 1 :(得分:0)

不,那是不正确的。

[_ previous autorelease]将自动释放消息发送给_previous。这就是这种语法的含义。