IOS property屬性
原子性
訪問權限
內存管理
方法命名
結論
1、原子性
(1)atomic
原子性,可以理解成就是生成getter、setter方法時,編譯器會自動為程序添加同步鎖,減少因為在不同的線程中同時對同一個內存地址進行讀寫操作,而產生的二意性、數據混亂的情況。
但同步鎖也不能一定保證能完全阻止同時讀寫的情況發生,而且同步鎖會耗費較多資源,降低程序的效率,因此不建議使用,但atomic是默認的特性。
(2)nonatomic
非原子性,也就是不添加同步鎖,讀寫效率會高,但需要開發人員注意同時讀寫的情況,可以使用gcd的欄柵和同步方法來保證。
2、訪問權限
(1)readWrite
生成getter、setter方法,並生成實例變量指針,但對於靜態庫類是無法修改的,所以即使能進入頭文件也無法修改。
(2)readOnly
只生成getter方法,可以用於數據保護,在interface中把屬性聲明了readOnly,在continue-class中再把屬性聲明為readWrite,就能實現私有屬性的效果,從而有更好的封裝特性,但其實通過KVC
依然可以從外部修改屬性,但不建議這樣使用。
3、內存管理
(1)strong:strong是推出ARC自動計數後後添加的屬性,效果與retain基本一致,都是在setter方法中,對舊數值release,對新數值retain。
(2)retain與strong基本一致
(3)assign:簡單賦值操作,通常針對普通類型,既不release,也不retain
(4)copy:能更好實現上下文環境保護。對舊值release,對新值進行copy操作,immutable+copy = 不可變淺復制,mutable+copy = 不可變深復制。
(5)weak:weak特性,並不會持有對象,當指向對象的指針全撤銷後,對象釋放,指針置nil,這常用於block的保留環
(6)unsafe_unretained:不會持有對象,但引用對象,對象釋放後,會產生野指針,主要用於兼容以前的方法。
4、方法命名
(1)getter = <name>
屬性生成的默認getter方法名:屬性名
(2)setter = <name>
屬性生成的默認getter方法名:set+屬性名
5、結論
屬性不是隨便填寫的,需要嚴格根據該屬性在程序中的作用,再選擇。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
[db:作者簡介][db:原文翻譯及解析]【IOS property屬性詳細介紹使用注意事項】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!