ios copy關鍵字的使用

2021-06-06 07:20:39 字數 1723 閱讀 1195

**:

copy關鍵字的使用

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

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

這裡建立乙個person類

person.h,**:

@inte***ce person : nsobject {

nsstring *name;

nsstring  *email;

@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

self = [super init];

if (self){

self.name = thename;

self.email = theemail;

- (id)copywithzone:(nszone *)zone

person *aperson = [[person allocwithzone:zone] initwithname:[self name] andemail:[self email]];

return aperson;

- (void)delloc

[name release];

[email release];

[super dealloc];

這裡說明一下,

在物件之間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];

iOS copy 關鍵字的使用

ios 開發中 copy 關鍵字的使用 在ios開發中,一般copy關鍵字用在nsstring nsarray nsdictionary等屬性欄位的修飾符。為什麼上述屬性需要使用copy修飾呢?原因是上述屬性都有可變的子類,如 nsstring nsmutablestring nsarray nsm...

this關鍵字使用

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

this關鍵字的使用

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