NSString copy,strong 修饰问题

Objective-C内存管理
本文通过一个Objective-C示例代码详细解释了使用strong和copy属性修饰符的区别,特别是它们如何影响字符串对象的行为。当使用strong时,对原始可变字符串的更改会影响到不可变字符串;而使用copy则会产生一个新的不可变字符串副本,从而避免了这种影响。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值