你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> iOS中copy的用法

iOS中copy的用法

編輯:關於IOS

平時我們使用對象之間的傳值都是采用retain count +1的方式,這種方式的適用於當對象的某屬性的值改變時,引用該對象的不同指針會同時改變,因為這兩個指針指向的是同一個內存地址,

但如果需求是,當一個指針執行的對象屬性值發生改變時,不影響另一個對象,那麼需要分配兩個不同的內存地址,也就是說,我們就不可以采用retain關鍵字了,而是要采用copy 關鍵字,因為copy關鍵字會在復制時重新創建一個新的對象。 舉例說明一下copy使用

這裡創建一個Person類

Person.h,代碼:

@interface 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];

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved