copy關鍵字的使用

2021-06-28 00:17:48 字數 1356 閱讀 5040

平時我們使用物件之間的傳值都是採用retain count +1的方式,這種方式的適用於當物件的某屬性的值改變時,引用該物件的不同指標會同時改變,因為這兩個指標指向的是同乙個記憶體位址,

但如果需求是,當乙個指標執行的物件屬性值發生改變時,不影響另乙個物件,那麼需要分配兩個不同的記憶體位址,也就是說,我們就不可以採用retain關鍵字了,而是要採用copy 關鍵字,因為copy關鍵字會在複製時重新建立乙個新的物件。 舉例說明一下copy使用

這裡建立乙個person類

person.h,**:

@inte***ce person : nsobject

@property (nonatomic, retain) nsstring *name;

@property (nonatomic,retain)nsstring *email;

@end

person.m檔案

#import 「person.h」

@synthesize name,email;

- (id)initwithname:(nsstring *)thename andemail:(nsstring *)theemail

}- (id)copywithzone:(nszone *)zone

- (void)delloc

這裡說明一下,

在物件之間copy,首先需要類是繼承自nsobject,其次需要實現協議,最後在方法中實現

- (id)copywithzone:(nszone *)zone 方法

如果沒有此方法那麼在copy物件,程式會直接宕機,並提示person類找不到copywithzone方法。

這裡還有一點需要注意的是,通常在nsarray之間copy,是retain方式的複製,也就是直接將引用係數+1,

如下 **:

nsarray *array1 = [[nsarray alloc] initwithobjects:person1,person2,person3,nil];

nsmutablearray *array2 = [array1  copy]; 或使用

nsmutablearray *array2 =[ [nsmutablearray alloc] initwitharray:array1];

如果想使用兩個不同記憶體,那麼就需要使用到nsarray 的deep copy,例如:

nsarray *array1 = [[nsarray alloc] initwithobjects:person1,person2,person3,nil];

nsmutablearray *array2 = [[nsmutablearray alloc] initwitharray:array1 copyitems:yes];

**:

strong 和 copy關鍵字的區別

記憶體管理 1.什麼是arc?arc是automatic reference counting自動引用計數,在程式編譯時自動加入retain release。在物件被建立時retain count 1,在物件被release時count 1,當count 0時,銷毀物件。程式中加入autorelea...

this關鍵字使用

一,表示類中屬性 1,沒有使用this的情況 class person public string getinfo public class thisdemo01 執行結果 姓名 null,年齡 0 可以得出結論 此時並沒有正確將內容賦給屬性 假設身邊有乙隻筆,遠處也有乙隻筆,肯定會就近拿身邊的筆。...

this關鍵字的使用

我們曾經曰 起名字要做到見名知意。this 是當前類的物件引用。簡單的記,它就代表當前類的乙個物件。注意 誰呼叫這個方法,在該方法內部的this就代表誰。this的場景 解決區域性變數隱藏成員變數 定義學生類 class student 姓名設定值 public void setname strin...