如果我有這樣自動釋放以前的對象由分配
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