copy相關

 

1. copy與retain的區別:安全

    1.1 copy是建立一個新對象,retain是建立一個指針,引用對象計數加1.Copy屬性表示兩個對象內容相同,新的對象retain爲1,與舊有對象的引用計數無關,舊有對象沒有變化,copy減小對象對上下文的依賴.函數

 

    1.2 retain屬性表示兩個對象地址相同(創建一個指針,指針拷貝),內容固然相同,這個對象的retain值+1也就是說,retain 是指針拷貝,copy 是內容拷貝.指針

 

// ...........................................................................................對象

2.字符串爲何要用Copy?內存

    2.1 概念rem

        假若有一個NSMutableString,如今用他給一個retain修飾的NSString賦值,那麼只是將NSString指向了NSMutableString所指向的位置,並對NSMUtbaleString計數器加一,此時,若是對NSMutableString進行修改,也會致使NSString的值修改,原則上這是不容許的. 若是是copy修飾的NSString對象,在用NSMutableString給他賦值時,會進行深拷貝,及把內容也給拷貝了一份,二者指向不一樣的位置,即便改變了NSMutableString的值,NSString的值也不會改變.因此用copy是爲了安全,防止NSMutableString賦值給NSString時,前者修改引發後者值變化而用的.字符串

 

    2.2 提示 : 謹記Copy屬性的setter方法的結構.內存管理

 

    2.3 : 簡述,當給一個對象賦新值時,會把新值拷貝一個副本出來賦值給對象,這樣新值跟舊值就沒有任何關係.table

 

// ...........................................................................................容器

 

3.淺拷貝和深拷貝.

    3.1 概念

        深拷貝 : 內容拷貝,源對象和副本對象指的是兩個不一樣的對象,源對象引用計數器不變,副本對象引用計數器爲1.

        淺拷貝 : 指針拷貝,源對象和副本對象指的都是同一個對象,對象引用計數器+1,至關於retain.

        提示 : 只有不可變對象建立不可變副本(copy)纔是淺拷貝,其它的都是深拷貝.

 

    3.2 若是對不可變對象拷貝,copy是指針拷貝(淺拷貝);可是,mutableCopy就是對象拷貝(深拷貝).

 

    3.3 若是是對可變對象拷貝,copy都是深拷貝;可是,copy返回的對象是不可變的.

 

// ...........................................................................................

 

4.自定義對象的拷貝

    4.1 自定義對象若是要淺拷貝就遵照<NSCopying>協議  (copy)

    4.2 自定義對象若是要深拷貝就遵照<NSMutableCopying>協議  (mutableCopy)

    4.3 自定義對象遵照了相關協議,就可以調用相應的深拷貝或者淺拷貝的方法

 

// ...........................................................................................

 

5.Block定義成屬性爲何用Copy?

    5.1 MRC : Block的本質是函數指針,內存地址在棧區,使用Copy是爲了把Block由棧區拷貝到堆區,共享給當前對象使用.

    5.2 ARC : Block定義成屬性時,使用strong和copy的效果是同樣,可是蘋果官方建議使用copy.

 

// ...........................................................................................

 

6.容器的內存管理

 

    5.1

    [tmpM addObject:obj];

    這樣obj的引用計數會增長1.tmpM對obj強引用.

  

    5.2

    [tmpM removeObjectAtIndex:0];

    obj的引用計數會減1.tmpM再也不對obj有引用.

相關文章
相關標籤/搜索