• 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

  • 相关阅读:
    常用的gem source
    The `master` repo requires CocoaPods 0.29.0
    day 26 对象的封装 抽象和接口
    day25 面向对象继承 多态
    day24 面向对象 命名空间组合 以及继承
    day23 模块和包的复习 初识面向对象
    day22 模块和包
    day21 其他常用模块和异常处理
    day20 模块
    day19正则表达式和re模块
  • 原文地址:https://www.cnblogs.com/yuwei0911/p/7206453.html
Copyright © 2020-2023  润新知