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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值