天天看點

OC中的關鍵字,weak,assign,copy,strong,nonatomic,retain

1:我們先看下weak和assign的差別;

      答:首先weak的作用是聲明為weak的指針,指針指向的位址一旦被釋放,這些指針都将被指派為nil。這樣的好處能有效的防止野指針。在c/c++開發過程中,為何大牛都說指針的空間釋放了後,都要将指針賦為NULL.在這兒用weak關鍵字幫我們做了這一步。

使用assign:對基礎資料類型 ,asssign 相于于指針指派,不對引用計數進行操作,注意原對象不用了,一定要把這個設定為nil

2:我們看下copy和retain的差別;

      答:retain相當于對原對象的引用計數加1;

copy 不對原對象的引用計數改變,生成一個新對象引用計數為1

copy:建立一個索引計數為1的對象,然後釋放舊對象

retain:釋放舊的對象,将舊對象的值賦予輸入對象,再提高輸入對象的索引計數為1

Copy其實是建立了一個相同的對象,而retain不是:

比如一個NSString對象,位址為0×1111,内容為@”stringnew”

Copy到另外一個NSString之後,位址為0×2222,内容相同,新的對象retain為1,舊有對象沒有變化

retain到另外一個NSString之後,位址相同(建立一個指針,指針拷貝),内容當然相同,這個對象的retain值+1

也就是說,retain是指針拷貝,copy是内容拷貝。

3:我們看下strong和nonatomic ?

strong 用來修飾強引用的屬性;

nonatomic ,非原子性通路,不加同步,多線程并發通路會提高性能。

注意,如果不加此屬性,則預設是兩個通路方法都為原子型事務通路。鎖被加到所屬對象執行個體級 。 是以不加nonatomic 對與多線程是安全的  。

iOS