關於retain, assign, copy的含義已經有很多文章了,自己使用的經驗:
賦值:
class.propertyA = instanceA
retain, assign, copy 隻影響 instanceA的計數,可能增加,可能不變。到這句執行完畢爲止,只要instanceA是合法的,propertyA就是合法的。
retain, assign, copy:
誰創建了instanceA還是誰負責釋放。但不同的類型,釋放的時間不同。
retain 可以馬上釋放。 assign 在 properyA 使用完畢後纔可以釋放 copy 可以馬上釋放。
常見的retain賦值:
addSubview, rootViewController, addGesture
常見的assign賦值:(概念上,背後到底有沒有保存變量無關緊要)
presentModalViewController; presentPopover
釋放:
對於retain類型的屬性:
class.propertyA = nil; // class.propertyA = xxx;
相當於:[propertyA release];
而assign類型的屬性(例如一般來說IBOutlet )
要釋放必須是:
[propertyA release];
而一般不應該釋放,沒有職責釋放assign類型的屬性。但是在ViewDidUnLoad裏面有時需要釋放IBOutlet來節省空間。