如果我有这样自动释放以前的对象由分配
void setSomeObject(SomeObjectClass obj /*, and some other params*/)
{
[_previous autorelease];
_previous = obj;
}
函数据我理解它的自动释放消息被发送到对象本身(未_previous) 所以在一个点上,有时当setSomeObject超出范围的原始对象是autoreleased(如果有)。它是否正确?我不使用属性,但我想通过使用它们释放的前一个对象将是自动的,当我做self.previous = obj;?
所以人们也可以写[_previous自动释放]但是它不是标准的感觉? (尽管需要确保它还没有指向相同的对象) – BuggerMe 2010-06-29 01:36:10
是的。如果你记得基本的内存管理规则,你拥有所有权的任何对象(由alloc/new/copy/retain获得)必须稍后放弃(release或autorelease),所以任何一个都可以工作。但在这种情况下,不需要autorelease,因为您不需要在函数的其余部分引用该对象。 避免所有这些的另一种方法是使用@synthesize常规@property(copy)或(retain),它为您创建访问器方法,而不是执行我在我的答案中编写的所有内容,您只需执行' self.someObject = obj'。 – jtbandes 2010-06-29 02:09:06