IOS屬性關(guān)鍵字筆記

關(guān)于IOS屬性關(guān)鍵字的一些理解和筆記,對于weak,strong,assign,nonatomic,natomic等的一些思考,如有錯(cuò)誤之處,請指正!

  • 原子性:natomic
    該屬性為默認(rèn)屬性,在多線程操作下,一個(gè)實(shí)例變量在某一時(shí)刻,只有一個(gè)線程訪問 。即變量的存取是互斥鎖定的。(不一定線程安全)

  • 非原子性: nonatomic
    nonatomic特質(zhì)的變量可以直接返回值,不受線程的影響,所以在執(zhí)行效率上更快。

  • 讀/寫權(quán)限:readwrite(讀寫)、readonly (只讀)
    從字面上就能理解readonly值具有g(shù)et方法,readwrite具有g(shù)et和set方法。

下面的內(nèi)存管理語義才是重點(diǎn)!!

  • retain :
    使引用計(jì)數(shù)加1(MRC環(huán)境下,相當(dāng)于ARC環(huán)境下的Strong,對MRC有畏懼感,不是很了解)
  • assign(基本數(shù)據(jù)類型默認(rèn)關(guān)鍵字):
    直接賦值,適用于基本數(shù)據(jù)類型(bool,int,cgfloat等),不會使retainCoun加1,只是簡單的賦值。(在MRC和ARC的環(huán)境下,都是使用默認(rèn)assign修飾基本數(shù)據(jù)類型)
  • strong :
    每次對屬性引用,retainCount都會加1,不用能與修飾基本數(shù)據(jù)類型,是NSObject和id的默認(rèn)修飾符。
  • weak:
    不會使retainCount增加,只用于修飾NSObject,不能用于修飾基本數(shù)據(jù)類型。(delegate和控價(jià)都推薦使用weak,防止循環(huán)引用)在對象被銷毀以后,指針指向nil。
  • copy:
    建立一個(gè)索引計(jì)數(shù)為1的對象,在賦值時(shí)使用傳入值的一份拷貝。這里分為深拷貝和淺拷貝(block建議使用copy,block建立的時(shí)候是放在棧上的,調(diào)用完畢以后就會被銷毀,使用copy將其放在堆上,只有在對象銷毀的時(shí)候才會銷毀)
    深拷貝:淺拷貝類似retain,引用計(jì)數(shù)對象+1.創(chuàng)建一個(gè)指針。也就是說,不僅改變值,還改變指正指向的內(nèi)存地址;
    淺拷貝:只改變指針指向的地址。即只拷貝了原對象的指針。

weak和assign的區(qū)別

weak 和 assign 最大的區(qū)別在于,weak修飾的屬性指向的對象被銷毀后自動指向nil,再向weak修飾的屬性發(fā)消息的時(shí)候,不會造成野指針,防止carh。并且weak只能修飾對象,assign修飾基本數(shù)據(jù)類型。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容