如果我有这样的功能
void setSomeObject( SomeObjectClass obj /*, and some other params*/ )
{
[_previous autorelease];
_previous = obj;
}
据我了解,autorelease消息被发送到对象本身(不是_previous) 所以有一次,当setSomeObject超出范围时,原始对象会被自动释放(如果有的话)。它是否正确?我没有使用属性,但我想通过使用它们,当我执行 self.previous = obj; 时会自动释放上一个对象?
答案 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。这就是这种语法的含义。