1. 程式人生 > >strong和copy

strong和copy

strong和copy


通常情況下, NSStringNSArray會使用 copy關鍵字修飾.
程式碼例項:

//定義Person類
@interface Person : NSObject
@property (nonatomic, strong) NSArray *array1;
@property (nonatomic, copy) NSArray *array2;
@end

//在ViewController中
@implementation ViewController
- (void)viewDidLoad {
	[super
viewDidLoad]; NSMutableArray *arrayM = [NSMutableArray arrayWithObject:@"one"]; Person *person = [[Person alloc] init]; person.array1 = arrayM; person.array2 = arrayM; [arrayM addObject:@"two"]; NSLog(@"\n array1:%@ \n array2:%@ \n", person.array1, person.array2); } @end

最終列印結果為:

array1:
( one, two ) array2:( one )

當使用strong時,array1arrayM都指向同一塊記憶體區域,當arrayM改變時,array1的內容也會改變,兩者是一樣的
當使用copy時,array2在賦值之前,將arrayM內容複製,建立一塊新的記憶體空間,所以兩者不同,不會隨它改變

歸根結底,不同修飾符,對應的setter方法不同
strong對應的setter方法,是將_propertyrelease([_property release]),然後將引數retain([property retain]),最後_property = property

.
copy對應的setter方法,是將_propertyrelease([_property release]),然後將引數內容copy([property copy]),建立一塊新的記憶體地址,最後_property = property.