iOS开发集锦

浅入深出的Copy和MutableCopy理解

2019-10-18  本文已影响0人  iOS亮子

<article data-v-568c8cdf="" itemscope="itemscope" itemtype="http://schema.org/Article" class="article" data-v-35aea154="">

拷贝的目的

拷贝出一个和原对象的相同的副本,互不影响

举个例子

    NSString *a = [NSString stringWithFormat:@"abcabcabc"];
    NSString *b = [a copy];
    NSString *c = [a mutableCopy];

    NSLog(@"%@,%@,%@",a,b,c);
    NSLog(@"%p,%p,%p",a,b,c);   
复制代码

输出结果:

abcabcabc,abcabcabc,abcabcabc
0xf9f7789ebc9c00cc,0xf9f7789ebc9c00cc,0x6000011f7090
复制代码

疑问

所以这里就引出一个概念

其他拷贝对象同理

不可变copy 为浅拷贝

注意

Tagged Pointer对象比较特殊。不用管理引用计数。

  NSString *a = [NSString stringWithFormat:@"abc"];
  NSLog(@"a retainCount = %ld",[a retainCount]);

  NSString *b = [a copy];
  NSLog(@"a retainCount = %ld",[a retainCount]);

  NSString *c = [a mutableCopy];

  NSLog(@"%@,%@,%@",a,b,c);
  NSLog(@"%p,%p,%p",a,b,c);
复制代码

结果

2019-09-12 13:54:58.109757+0800 Copy MutableCopy[13700:49429440] a retainCount = -1
2019-09-12 13:54:58.109876+0800 Copy MutableCopy[13700:49429440] a retainCount = -1
2019-09-12 13:54:58.109989+0800 Copy MutableCopy[13700:49429440] abc,abc,abc
2019-09-12 13:54:58.110062+0800 Copy MutableCopy[13700:49429440] 0xd5e0520931336344,0xd5e0520931336344,0x6000038d3330
复制代码

Tagged Pointed 可以知道a b 为Tagged Pointer 对象 想深入了解的的可以看一下。

总结

NSString NSMutableString NSArray NSMutableArray NSDictionary NSMutableDictionary
copy 浅拷贝 深拷贝 浅拷贝 深拷贝 浅拷贝 深拷贝
mutableCopy 深拷贝 深拷贝 深拷贝 深拷贝 深拷贝 深拷贝

作为一个开发者,有一个学习的氛围和一个交流圈子特别重要,这是我的交流群(123),大家有兴趣可以进群里一起交流学习

作者:Rui4u君
链接:https://juejin.im/post/5d79df18e51d4561a91850fd

上一篇下一篇

猜你喜欢

热点阅读