关于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来节省空间。