NSString copy,strong 修饰问题

2017-07-1

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic, strong) NSString *str1;
@property (nonatomic, copy) NSString *str2;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
   
    @autoreleasepool {
        NSMutableString *str = [NSMutableString stringWithString:@"hello"];
        
        self.str1 = str;
        self.str2 = str;
        [str appendString:@" world"];
        NSLog(@"str1:%@ str2:%@", self.str1, self.str2); // str1:hello world str2:hello
    }
    
}

2017-07-19 16:13:23.526 多线程[54069:31793118] str1:hello world str2:hello

  当一个可变字符串,赋值给一个strong修饰的,不可变字符串,,随后对可变字符串修改,不可变字符串会跟随着改变,

  当一个可变字符串,赋值给一个copy修饰的,不可变字符串,随后对可变字符串修改,不可变字符串不会随之改变,

  原因:copy修饰, 当可变字符串赋值时,会进行copy操作,是一个新的对象, 是一个新的指针, 并不指向这个可变字符.所有copy修饰的不可变字符,不会随着可变字符的修改后进行改变

9 16:13:23.526 多线程[54069:31793118] str1:hello world str2:hello

转载于:https://www.cnblogs.com/yuwei0911/p/7206453.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值