簡述 retain/strong /assign/weak/copy 有什麼區別?
答:
任何一個值,在屬性中,本質上保存的都是一個“數字”。
-如果是對象,保存的是堆中的地址;
-如果是基本對象,保存的是基本對象的數值;
定義屬性的時候,通常會指定 屬性的類型
-retain 是 MRC ,在設置數值的時候,會對對象引用計數 +1 ;
-strong 是 ARC,與retain等效;
-assign 是 ARC/MRC ,在設置數值的時候,不會做任何附加操作。
-ARC 中,通常用來保存基礎變量
-MRC 中,如果不需要引用,通常就用assign
-weak 是 ARC ,用來保存不需要強引用的對象
weak 與 assign 的區別:
assign 指向的對象如果被釋放,地址不會有任何變化,效率高但是風險大(野指針)
weak 指向的對象如果被釋放,地址會立刻變化爲 nil