2011-07-25 29 views

回答

1

不,他們只是處理對象,他們不控制內存。

您應該在創建方法中釋放某些內容。 或者,如果它是財產或伊娃,你應該釋放它在dealloc(如果它被保留)。

2

該語言不會自動保留參數。但是,遵守規則的代碼將保留或複製在執行離開其範圍後需要保留的任何內容。

換句話說:

id object = [[SomeClass alloc] init]; 
[otherObject doSomethingWithObject:object]; 
[object release]; 

該代碼應始終是好的,因爲如果doSomethingWithObject:需求,以保持它的參數周圍,它會retain發送它,如果它不,它不會。

+0

感謝您的回覆。 – optimusPrime

+0

在上面的例子中,假設執行順序發生,萬一doSomethingWithObject方法不保留參數,在下一行釋放對象不應該導致問題? – optimusPrime

+1

@ nithin.manu:你說得對。同樣,如果方法保留了參數,這裏的釋放只會減少引用計數。因此,保留對象也必須發送釋放消息。 –

0

方法不增加引用計數。但是,如果您將其分配給保留計數的變量,則需要明確向兩者發送一個零消息。當您不再需要使用它時,可以釋放一個變量。因此,只要發送了保留消息,分配的變量就會使其引用計數遞增。因此,您需要發送相同數量的發佈消息,直到引用計數變爲零。