oc中strong,copy修饰符区别

在iOS开发中经常见到copy,strong修饰符。在NSString的属性中会看到copy和strong的存在。大部分情况下NSString的属性都是copy。那么strong和copy的区别是什么?

@property (nonatomic, copy)     NSString *string1;
@property (nonatomic, strong)   NSString *string2;

定义方法

- (void)judge
 {
     NSString *string3 = @"abc";
     self.string1 = string3;
     self.string2 = string3;

    NSLog(@"string3===%p %p", string3, &string3);
    NSLog(@"string1===%p %p", self.string2, &_string1);
    NSLog(@"string2===%p %p", self.string2, &_string2);

 }

打印结果

string3===0x10d7210b0 0x7fff525af298
string1===0x10d7210b0 0x7fe11bc0ebb0
string2===0x10d7210b0 0x7fe11bc0ebb8

此时将string3 = @”qwr”;
打印结果

string3===0x10cc1d130 0x7fff530b4298
string1===0x10cc1d0b0 0x7fbc06e0a170
string2===0x10cc1d0b0 0x7fbc06e0a178

我们发现只有string3有变。strin1和string2指向的还是原来的值

结论:使用NSString类的时候,无论使用copy还是strong,当再次改变时,还是指向原来的位置。也就是浅拷贝

使用NSMutableString声明

    NSMutableString *string3 = [NSMutableString stringWithFormat:@"abc"];

    self.string1 = string3;
    self.string2 = string3;
    NSLog(@"%@", self.string1);
    NSLog(@"%@", self.string2);
    NSLog(@"%@", string3);

    [string3 appendString:@"qwr"];
    NSLog(@"%@", self.string1);
    NSLog(@"%@", self.string2);
    NSLog(@"%@", string3);

打印结果

string1 ==== abc
string2 ==== abcqwr
string3 ==== abcqwr

当string3改变的时候,用strong修饰的string2随着一起变动。而用copy修饰的string1没有变动

结论:使用NSMutableString类的时候,使用copy修饰会产生新的对象,两者指向新的位置,也就是深拷贝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值