? ?使用屬性關鍵字前,需要先理解屬性關鍵字的作用。其實《簡單來說...》就是指導底層如何生成set、get方法的,如果不自己定義set、get方法,系統將會自動為你生成,但如何生成依據的就是這些屬性關鍵字,不同的屬性關鍵字的組合將決定set、get方法的具體實現,實現不同,功能自然也就不同了...
----------------------------------------------------------------------------------------------------------------------------------------
ARC:
1、assign:基本數據類型、枚舉、結構體等非OC對象類型。
2、strong/retain:使用必須滿足兩個條件,一是必須是OC對象類型,二是需要被強引用不能'隨便'釋放。
3、weak:
1)別人創(chuàng)建別人擁有,你只是借用一下而已,隨時可能會不見,但不見的時候你可以發(fā)現。
2)使用時必須滿足兩個條件,一是必須是OC對象類型,二是自己不直接擁有的對象。比如delegate,parentviewcontroller等,以防止循環(huán)引用。
3)weak有一個大招,就是當所指對象被釋放的時候會自動置為nil。實現的原理《簡單來說...》就是每一個strong維護一個weaktable,當把一個strong對象賦值給weak對象時,weaktable中就記錄該weak對象,當strong釋放時就把weaktable中所有的對象取出來挨個置為nil。
4、copy:用于block。用于NSString、NSDictionary、NSArray等有Mutable類型的類,此處可以理解為(copy=不可變)。經過測試后發(fā)現當把NSString對象賦給copy類型的NSString時,地址未發(fā)生改變相當于淺拷貝和strong效果一樣,但把NSMutableString賦給copy類型的NSString時地址發(fā)生改變,此處相當于深拷貝。
5、readonly/readwrite:只讀/可讀寫.
6、atomic/nonatomic:原子操作/非原子,《簡單來說...》就是是否線程安全,但通過此方法來保證線程安全開銷是很大滴,如果條件允許還是在適合的地方加鎖靠譜。
7、getter/setter:以上都無所謂了,自己寫set、get方法。
----------------------------------------------------------------------------------------------------------------------------------------
MRC:
1、assign:基本數據類型、枚舉、結構體等非OC對象類型。也可用于delegate\\parentviewcontroller等不直接擁有的對象,作為MRC下weak的替代品。
2、retain:使用必須滿足兩個條件,一是必須是OC對象類型,二是需要被強引用不能'隨便'釋放。
3、unsafe_unretained:
1)別人創(chuàng)建別人擁有,你只是借用一下而已,隨時可能會不見,并且不見的時候連個招呼都不打。與ARC中weak的區(qū)別就是不會自動置為nil。
2)使用時必須滿足兩個條件,一是必須是OC對象類型,二是自己不直接擁有的對象。
3)與assign的唯一區(qū)別就是不能用于基本數據類型。
4、copy:用于block。用于NSString、NSDictionary、NSArray等有Mutable類型的類,此處可以理解為(copy=不可變)。經過測試后發(fā)現當把NSString對象賦給copy類型的NSString時,地址未發(fā)生改變相當于淺拷貝和strong效果一樣,但把NSMutableString賦給copy類型的NSString時地址發(fā)生改變,此處便想當于深拷貝了。
5、readonly/readwrite:只讀/可讀寫.
6、atomic/nonatomic:原子操作/非原子,《簡單來說...》就是是否多線程安全,但通過此方法來保證多線程安全開銷是很大滴,如果條件允許還是在適合的地方加鎖靠譜。
7、getter/setter:以上都無所謂了,自己寫set、get方法。