1.atomic與nonatomic
atomic:默認(rèn)是有該屬性的忧换,這個(gè)屬性是為了保證程序在多線程情況,編譯器會(huì)自動(dòng)生成一些互斥加鎖代碼欣簇,避免該變量的讀寫(xiě)不同步問(wèn)題
nonatomic:如果該對(duì)象無(wú)需考慮多線程的情況栖疑,請(qǐng)加入這個(gè)屬性,這樣會(huì)讓編譯器少生成一些互斥加鎖代碼侣姆,可以提高效率。
2.readwrite與readonly(readwrite沉噩、readonly這兩個(gè)屬性的真正價(jià)值捺宗,不是提供成員變量訪問(wèn)接口,而是控制成員變量的訪問(wèn)權(quán)限)
readwrite:這個(gè)屬性是默認(rèn)的情況川蒙,會(huì)自動(dòng)為你生成存取器偿凭。
readonly:只生成getter不會(huì)有setter方法。
3.strong與weak(strong與retain功能相似派歌;weak與assign相似弯囊,只是當(dāng)對(duì)象消失后weak會(huì)自動(dòng)把指針變?yōu)閚il;)
strong:強(qiáng)引用,也是我們通常說(shuō)的引用胶果,其存亡直接決定了所指向?qū)ο蟮拇嫱鲐抑觥H绻淮嬖谥赶蛞粋€(gè)對(duì)象的引用,并且此對(duì)象不再顯示在列表中早抠,則此對(duì)象會(huì)被從內(nèi)存中釋放霎烙。
weak:弱引用,不決定對(duì)象的存亡蕊连。即使一個(gè)對(duì)象被持有無(wú)數(shù)個(gè)弱引用悬垃,只要沒(méi)有強(qiáng)引用指向它,那么還是會(huì)被清除甘苍。
4.assign尝蠕、copy、retain
assign:默認(rèn)類(lèi)型载庭,setter方法直接賦值看彼,不進(jìn)行任何retain操作廊佩,不改變引用計(jì)數(shù)。一般用來(lái)處理基本數(shù)據(jù)類(lèi)型靖榕。
retain:釋放舊的對(duì)象(release)标锄,將舊對(duì)象的值賦給新對(duì)象,再令新對(duì)象引用計(jì)數(shù)為1茁计。我理解為指針的拷貝料皇,拷貝一份原來(lái)的指針,釋放原來(lái)指針指向的對(duì)象的內(nèi)容星压,再令指針指向新的對(duì)象內(nèi)容践剂。
copy:與retain處理流程一樣,先對(duì)舊值release租幕,再copy出新的對(duì)象,retainCount為1.為了減少對(duì)上下文的依賴(lài)而引入的機(jī) 制拧簸。我理解為內(nèi)容的拷貝劲绪,向內(nèi)存申請(qǐng)一塊空間,把原來(lái)的對(duì)象內(nèi)容賦給它盆赤,令其引用計(jì)數(shù)為1贾富。對(duì)copy屬性要特別注意:被定義有copy屬性的對(duì)象必須要 符合NSCopying協(xié)議,必須實(shí)現(xiàn)- (id)copyWithZone:(NSZone *)zone方法牺六。
也可以直接使用:
使用assign: 對(duì)基礎(chǔ)數(shù)據(jù)類(lèi)型 (NSInteger颤枪,CGFloat)和C數(shù)據(jù)類(lèi)型(int, float, double, char, 等等)
使用copy: 對(duì)NSString
使用retain: 對(duì)其他NSObject和其子類(lèi)