iOS中copy和strong的区别

 NSString *string = @"123";
 self.cStr = string;
 self.sStr = string;
 NSLog(@"string==%p--%p",string,&(string));
 NSLog(@"cStr==%p--%p",_cStr,&(_cStr));
 NSLog(@"sStr==%p--%p",_sStr,&(_sStr));
 string = @"999";
 NSLog(@"string==%p--%p",string,&(string));
 NSLog(@"cStr==%@,sStr==%@",self.cStr,self.sStr);
    
 //通过输出可以看出:指针的地址发生了变化,但是指针指向的地址没有发生变化。string重新赋值(自身(地址)发生了变化),指向了的地址也发生了变化,本身指向地址发生了变化。cStr和sStr没有发生变化。

 NSMutableString *muStr = [NSMutableString stringWithString:@"456"];
 self.cStr2 = muStr;
 self.sStr2 = muStr;
 NSLog(@"string==%p--%p",muStr,&(muStr));
 NSLog(@"cStr==%p--%p",_cStr2,&(_cStr2));
 NSLog(@"sStr==%p--%p",_sStr2,&(_sStr2));
 [muStr appendString:@"1111"];
 NSLog(@"cStr==%@,sStr==%@",self.cStr2,self.sStr2);
 //通过输出可以看到cStr2和sStr2地址和string不一样,cStr指向的地址发生了变化,copy了一份内容。sStr2指向的内容发生变化,即指向的地址没变化,还是muStr的地址。muStr地址的内容变化了,sStr2的指向的地址的值也变化了。
 2018-10-24 22:56:52.097643+0800 LocalTestProject[1208:28795] string==0x10727a178--0x7ffee89854d8
 2018-10-24 22:56:52.097797+0800 LocalTestProject[1208:28795] cStr==0x10727a178--0x7fd16fd0cc08
 2018-10-24 22:56:52.097930+0800 LocalTestProject[1208:28795] sStr==0x10727a178--0x7fd16fd0cc00
 2018-10-24 22:56:52.098015+0800 LocalTestProject[1208:28795] string==0x10727a1f8--0x7ffee89854d8
 2018-10-24 22:59:02.559413+0800 LocalTestProject[1208:28795] cStr==123,sStr==123
 2018-10-24 22:59:05.719142+0800 LocalTestProject[1208:28795] string==0x60400005e510--0x7ffee89854d0
 2018-10-24 22:59:05.719330+0800 LocalTestProject[1208:28795] cStr==0xa000000003635343--0x7fd16fd0cc18
 2018-10-24 22:59:05.719448+0800 LocalTestProject[1208:28795] sStr==0x60400005e510--0x7fd16fd0cc10
 2018-10-24 22:59:07.172499+0800 LocalTestProject[1208:28795] cStr==456,sStr==4561111

你可能感兴趣的:(iOS中copy和strong的区别)