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.

猜你喜欢

转载自blog.csdn.net/weixin_42983482/article/details/83026499