美文网首页
2018-04-19 NSString 用copy修饰为什么?

2018-04-19 NSString 用copy修饰为什么?

作者: 龙之天下 | 来源:发表于2018-04-19 15:10 被阅读13次

    当时问道这个问题彻底的蒙圈了,............, A lot of ellipsis on behalf of my mood (好多省略号代表我的心情)

    接下来想做一些验证:
    首先创建两个属性如下:

    @property (nonatomic,copy) NSString * ntvCopyName;
    @property (nonatomic, strong) NSString *strong_name;

    提出自己的疑问?
    //NSString 被copy修饰的ntvCopyName和被strong修饰的strong_name 地址会不会变化呢?

        NSString * originString = @"To say To young people";
        NSLog(@"originString:%@",originString);
        NSLog(@"originString:%@--内存地址:%p",originString,originString);
        self.ntvCopyName = originString;
        self.strong_name = originString;
    
        NSLog(@"self.copy_name :%@--内存地址:%p",  self.ntvCopyName,self.ntvCopyName);
        NSLog(@"self.strong_name:%@--内存地址:%p",    self.strong_name,self.strong_name);
    
        /*
          用NSString类型验证的打印结果:
         self.ntvCopyName和
         self.strong_name的地址与originString地址一样
         目前打印的值是一样
          无论被copy修饰还是被strong的字符串的对象的 地址和值没有受影响
         */
        
        //      NSMutableString  被copy修饰的ntvCopyName和被strong修饰的strong_name 地址会不会变化呢?
        NSMutableString *mutableString = [NSMutableString stringWithString:originString];
        self.ntvCopyName = mutableString;
        self.strong_name = mutableString;
        NSLog(@"mutableString:%@--内存地址:%p",mutableString,mutableString);
        NSLog(@"self.copy_name :%@--内存地址:%p",  self.ntvCopyName,self.ntvCopyName);
        NSLog(@"self.strong_name:%@--内存地址:%p",    self.strong_name,self.strong_name);
        /*
           用NSMutableString类型验证的打印结果:
             self.strong_name的地址还是与mutableString地址一样
             self.ntvCopyName的地址发生变化了,并不与mutableString地址一样,它新开辟一块地址
             目前打印的值是一样,指针指向并不是同一块地址
         */
        // 给mutableString额外的添加字符串
        [mutableString appendString:@"We should study deeply"];
        NSLog(@"给mutableString额外的添加字符串:mutableString:%@--内存地址:%p",mutableString,mutableString);
        NSLog(@"给mutableString额外的添加字符串:self.copy_name :%@--内存地址:%p",  self.ntvCopyName,self.ntvCopyName );
        NSLog(@"给mutableString额外的添加字符串:self.strong_name:%@--内存地址:%p",    self.strong_name,self.strong_name);
        
        /*
             1.将NSMutableString 类型的对象赋值给被copy所修饰的NSString的对象,NSString的对象的地址会发生变化,并不和NSMutableString 类型的对象的地址一样
             2.将NSMutableString 类型的对象赋值给被strong所修饰的NSString的对象,NSString的对象的地址会发生变化,和NSMutableString 类型的对象的地址一样
            3.NSMutableString类型对象的值发生变化,则被copy所修饰的NSString的对象的值并不发生变化而被strong所修饰的NSString的对象的值随之变化(和NSMutableString类型对象的值一样)
         */
    

    个人建议:
    NSString 类型用copy所修饰,NSMutableString类型可以用strong来修饰。
    以上个人观点,希望可以互相交流。

    相关文章

      网友评论

          本文标题:2018-04-19 NSString 用copy修饰为什么?

          本文链接:https://www.haomeiwen.com/subject/rquwkftx.html