美文网首页电脑相关
Strong 与Copy的区别

Strong 与Copy的区别

作者: 雪_晟 | 来源:发表于2017-02-05 18:10 被阅读54次

    什么时候使用Strong与copy一直分不清,其实这个和浅拷贝和深拷贝有关系。参考:参考,文章中有一点不足,稍后会做补充。

    当对NSString进行strong 与copy 时,会有什么不同呢:

    #import "ViewController.h"
    
    @interface ViewController ()
    @property(nonatomic,strong)NSString *strongString;
    @property(nonatomic,copy)NSString *copyedString;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        [self test];
    }
    -(void)test{
        NSString *string =[NSString stringWithFormat:@"abcshshsrhjrshsrjhsrhjs"];
    
        self.strongString = string;
        self.copyedString = string;
    
        NSLog(@"%lu",[string retainCount]);
        NSLog(@"orign string:%p,%p",string,&string);
        NSLog(@"strong string:%p,%p",_strongString,&_strongString);
        NSLog(@"copy string:%p,%p",_copyedString,&_copyedString);
        
    }
    

    打印截图如下:


    Nsstring.png

    可以很直观的看到,引用计数为3 ,strong和copy后指针指向的地址是相同的,所以说对NSString进行操作时,strong与copy都是对字符串进行了浅拷贝,只是拷贝了指针指向。(补充下参考文章中没有指明的一点,亲测, 当format后面的字符串长度大于等于12时, 引用计数为1. 这个现象存在于initWithFormat:和stringWithFormat:方法, 至于有没有其他方法也会有这种情况不敢确定,当只有很少的字符时,引用计数为-1,有兴趣的可以测试下,只是对文章中进行补充)

    对不可变字符串进行strong与copy时会有什么不同呢

    修改一行代码:

    NSMutableString *string =[NSMutableString stringWithFormat:@"agagagagagagaegagaga"];
    
        self.strongString = string;
        self.copyedString = string;
    
        NSLog(@"%lu",[string retainCount]);
        NSLog(@"%lu",[_strongString retainCount]);
        NSLog(@"%lu",[_copyedString retainCount]);
    
        NSLog(@"orign string:%p,%p",string,&string);
        NSLog(@"strong string:%p,%p",_strongString,&_strongString);
        NSLog(@"copy string:%p,%p",_copyedString,&_copyedString);
        
    
    
    MustableStiring2.png

    可以很明显的看到string 与_strongString的引用计数为2,_copyString的引用计数为1,string 与_strongString的地址是相同的,而_copyString指向的新的地址,所以对于可变字符串,strong使用了浅拷贝,copy使用了深拷贝

    相关文章

      网友评论

        本文标题:Strong 与Copy的区别

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