IOS property屬性詳細(xì)介紹使用注意事項(xiàng)
IOS property屬性
原子性
- atomic
- nonatomic
訪問權(quán)限
- readWrite
- readOnly
內(nèi)存管理
- strong
- retain
- copy
- assign
- weak
- unsafe_unretained
方法命名
- getter = <name>
- setter = <name>
結(jié)論
1、原子性
(1)atomic
原子性,可以理解成就是生成getter、setter方法時(shí),編譯器會(huì)自動(dòng)為程序添加同步鎖,減少因?yàn)樵诓煌木€程中同時(shí)對(duì)同一個(gè)內(nèi)存地址進(jìn)行讀寫操作,而產(chǎn)生的二意性、數(shù)據(jù)混亂的情況。
但同步鎖也不能一定保證能完全阻止同時(shí)讀寫的情況發(fā)生,而且同步鎖會(huì)耗費(fèi)較多資源,降低程序的效率,因此不建議使用,但atomic是默認(rèn)的特性。
(2)nonatomic
非原子性,也就是不添加同步鎖,讀寫效率會(huì)高,但需要開發(fā)人員注意同時(shí)讀寫的情況,可以使用gcd的欄柵和同步方法來保證。
2、訪問權(quán)限
(1)readWrite
生成getter、setter方法,并生成實(shí)例變量指針,但對(duì)于靜態(tài)庫(kù)類是無法修改的,所以即使能進(jìn)入頭文件也無法修改。
(2)readOnly
只生成getter方法,可以用于數(shù)據(jù)保護(hù),在interface中把屬性聲明了readOnly,在continue-class中再把屬性聲明為readWrite,就能實(shí)現(xiàn)私有屬性的效果,從而有更好的封裝特性,但其實(shí)通過KVC
依然可以從外部修改屬性,但不建議這樣使用。
3、內(nèi)存管理
(1)strong:strong是推出ARC自動(dòng)計(jì)數(shù)后后添加的屬性,效果與retain基本一致,都是在setter方法中,對(duì)舊數(shù)值release,對(duì)新數(shù)值retain。
(2)retain與strong基本一致
(3)assign:簡(jiǎn)單賦值操作,通常針對(duì)普通類型,既不release,也不retain
(4)copy:能更好實(shí)現(xiàn)上下文環(huán)境保護(hù)。對(duì)舊值release,對(duì)新值進(jìn)行copy操作,immutable+copy = 不可變淺復(fù)制,mutable+copy = 不可變深復(fù)制。
(5)weak:weak特性,并不會(huì)持有對(duì)象,當(dāng)指向?qū)ο蟮闹羔樔蜂N后,對(duì)象釋放,指針置nil,這常用于block的保留環(huán)
(6)unsafe_unretained:不會(huì)持有對(duì)象,但引用對(duì)象,對(duì)象釋放后,會(huì)產(chǎn)生野指針,主要用于兼容以前的方法。
4、方法命名
(1)getter = <name>
屬性生成的默認(rèn)getter方法名:屬性名
(2)setter = <name>
屬性生成的默認(rèn)getter方法名:set+屬性名
5、結(jié)論
屬性不是隨便填寫的,需要嚴(yán)格根據(jù)該屬性在程序中的作用,再選擇。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
iOS開發(fā)教程之UIView和UIViewController的生命周期詳解
UIViewController是IOS程序中的一個(gè)重要組成部分,下面這篇文章主要給大家介紹了關(guān)于iOS開發(fā)教程之UIView和UIViewController的生命周期的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-04-04iOS適配https證書問題(AFNetworking3.0為例)
本篇文章主要介紹了iOS適配https問題(AFNetworking3.0為例)。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02iOS動(dòng)態(tài)調(diào)整UILabel高度的幾種方法
在iOS編程中UILabel是一個(gè)常用的控件,下面這篇文章主要給大家介紹了關(guān)于iOS動(dòng)態(tài)調(diào)整UILabel高度的幾種方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12UITableViewCell在編輯狀態(tài)下背景顏色的修改方法
這篇文章主要給大家介紹了關(guān)于UITableViewCell在編輯狀態(tài)下背景顏色的修改方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。2017-07-07iOS開發(fā)中使用UIScrollView實(shí)現(xiàn)圖片輪播和點(diǎn)擊加載
這篇文章主要介紹了iOS開發(fā)中使用UIScrollView實(shí)現(xiàn)圖片輪播和點(diǎn)擊加載的方法,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-12-12iOS實(shí)現(xiàn)簡(jiǎn)單的頭部縮放功能
這篇文章主要介紹了iOS 簡(jiǎn)單的頭部縮放效果,頭部伴隨模糊效果放大縮小,并在一定位置時(shí)懸停充當(dāng)導(dǎo)航欄,本文給大家提供實(shí)現(xiàn)思路,需要的朋友可以參考下2018-08-08