1、作用:
@property int age;
1) 生成_age
2) 生成_age的get和set方法的聲明
3) 實現(xiàn)_age的get和set方法
2、分類:
1)、 MRC:assign/ retain/ copy/ readwrite、readonly/ nonatomic、atomic 等。
2)、 ARC:assign/ strong/ weak/ copy/ readwrite、readonly/ nonatomic、atomic 等。
3)、原子性:
automic:對原子屬性加鎖,多線程下安全,默認(rèn)值,低性能,是防止在寫未完成的時候 被另外一個線程讀取,造成數(shù)據(jù)錯誤。
nonautomic:對原子屬性不加鎖,多線程下不安全,速度快,高性能
4)、讀寫屬性:(是否要生成setter方法)
readWrite:讀寫屬性,生成getter、setter方法,默認(rèn)值
readOnly:只讀屬性,只生成getter方法
5)、
weak 表示對對象的弱引用,被weak修飾的對象隨時可被系統(tǒng)銷毀和回收。
weak比較常用的地方就是delegate屬性的設(shè)置。
用weak修飾弱引用,不會使傳入對象的引用計數(shù)加1。
Set方法處理:
assign:直接賦值,默認(rèn)
注意:
MRC 和 ARC 都可以用assign。
assign下的setter方法:
-(void)setName :(id)str{
name = str;
}
retain:對對象release舊值,retain新值
copy:release舊值,copy新值
3、注意
1)、set和get方法的名稱
修改set和get方法的名稱,主要用于布爾類型。因為返回布爾類型的方法名一般以is開頭,修改 名稱 一般用在布爾類型中的getter。
@property(nonatomic,assign, setter=abc:,getter=haha)int age
可以理解為把[p setAge: ]------> [p abc:], [p age] ---------> [p haha];
2)、assign和weak的區(qū)別:
當(dāng)它們指向的對象釋放以后,weak會被自動設(shè)置為nil,而assign不會,所以會導(dǎo)致野指針的出現(xiàn),可能會導(dǎo)致crash。
3)、strong和weak的區(qū)別:
strong :表明是一個強(qiáng)引用,相當(dāng)于MRC下的retain,只要被strong引用的對象就不會被銷毀,當(dāng)所有的強(qiáng)引用消除時,對象的引用計數(shù)為0時,對象才會被銷毀。
weak : 表明是一個弱引用,相當(dāng)于MRC下的assign,不會使對象的引用計數(shù)+1。
4)、兩個不同對象相互strong引用對象,會導(dǎo)致循環(huán)引用造成對象不能釋放,造成內(nèi)存泄漏。
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。