@property 是聲明屬性的語(yǔ)法隆檀,我們可以通過(guò)property 快速方便的為實(shí)例創(chuàng)建讀取器,同時(shí)允許我們通過(guò)點(diǎn)語(yǔ)法來(lái)使用讀取器。
property 在創(chuàng)建實(shí)例的時(shí)候恐仑,會(huì)隱形的創(chuàng)建get 和 set 方法
在類文件外部泉坐,也可以調(diào)用property 屬性所聲明的實(shí)例,但是其他的方式聲明的對(duì)象是不能被外部所讀取的裳仆。
property 屬性主要有:atomic腕让、nonatomic、strong歧斟、copy纯丸、assign、weak构捡、readwrite、readonly壳猜、getter勾徽、setter 等修飾符
(1)原子性:atomic 和 nonatomic
atomic 意思是原子性,意味著只有一個(gè)線程可以同時(shí)訪問(wèn)實(shí)例统扳。atomic 是線程安全的喘帚,至少在當(dāng)前的讀取器是安全的。雖然它是一個(gè)默認(rèn)屬性咒钟,但是由于其使用同步鎖開銷較大吹由,帶來(lái)性能問(wèn)題
nonatomic則表示是非原子性的。它可以被多個(gè)線程訪問(wèn)朱嘴。效率要比atomic 高倾鲫,但是不能保證其在多線程狀態(tài)下的安全性,在單線程和明確只有一個(gè)線程訪問(wèn)的情況下被廣泛使用萍嬉。
(2)存取控制器
readwrite(默認(rèn)值):表示其同時(shí)擁有g(shù)etter 和 setter 方法乌昔;
readonly:只讀操作,其只有g(shù)etter 方法壤追,沒有setter 方法磕道;
注:如果某個(gè)實(shí)例只允許被外部讀取,而不能寫入操作行冰,同時(shí)在類實(shí)現(xiàn)文件當(dāng)中可以寫入的話溺蕉,可以在頭文件中聲明屬性為只讀的,在實(shí)現(xiàn)文件中設(shè)置其為可讀寫的屬性悼做。
例:頭文件中聲明為:@property(nonatomic,readonly,copy) NSString *stringA;
實(shí)現(xiàn)文件中聲明為:@property(nonatomic,readwrite,copy) NSString *stringA;
(3)內(nèi)存管理
assign:用于值類型疯特,如int,float 等
weak:用于NSObject 類的實(shí)例修飾肛走,引用計(jì)數(shù)不變
strong 和 retain :修飾 NSObject 類的實(shí)例辙芍,同時(shí)引用計(jì)數(shù)會(huì)+1
copy:與strong相似,但是其分為淺層復(fù)制和深復(fù)制兩種,其是對(duì)傳入對(duì)象的副本擁有所有權(quán)故硅,而不是傳入對(duì)象本身庶灿。
注:copy 注意區(qū)別淺復(fù)制和深復(fù)制兩種方式,NSString吃衅、NSArray往踢、NSDictionary等不可變類型都為淺層復(fù)制,即其引用計(jì)數(shù)會(huì)+1徘层,而不會(huì)創(chuàng)建新的內(nèi)存峻呕。