Object-C 中集合strong和copy的区别

  之前写过一篇文章《Object-C 中strong和copy的区别》主要讨论分析了strong和copy在不同场景下的区别,最近发现漏了一个点,就是自定义对象(注:继承自NSObect的对象)组成的数组,执行copy,strong操作后,对元素的retainCount的影响,一直没有验证,内心总是有疑惑,接下来和大家一块验证下。
源码如下:

PersonModel *person1 = [PersonModel new];
    PersonModel *person2 = [PersonModel new];
    NSLog(@"person1_count %@",[person1 valueForKey:@"retainCount"]);
    NSArray *array1 = @[person1,person2];
    NSLog(@"person1_count %@",[person1 valueForKey:@"retainCount"]);
    NSLog(@"array1 %p",array1);
    NSArray *array2 = [array1 copy];
    NSLog(@"person1_count %@",[person1 valueForKey:@"retainCount"]);
    NSLog(@"array2 %p",array2);
    NSMutableArray *array3 = [array1 mutableCopy];
    NSLog(@"array3 %p",array3);
    NSLog(@"person1_count %@",[person1 valueForKey:@"retainCount"]);

打印结果如下:

2019-09-21 18:54:57.535035+0800 Demo[3219:3004726] person1_count 1
2019-09-21 18:54:57.535145+0800 Demo[3219:3004726] person1_count 2
2019-09-21 18:54:57.535199+0800 Demo[3219:3004726] array1 0x600003cd54a0
2019-09-21 18:54:57.535262+0800 Demo[3219:3004726] person1_count 2
2019-09-21 18:54:57.535368+0800 Demo[3219:3004726] array2 0x600003cd54a0
2019-09-21 18:54:57.535480+0800 Demo[3219:3004726] array3 0x6000032d8d50
2019-09-21 18:54:57.535544+0800 Demo[3219:3004726] person1_count 3

根据打印我们可以看出来,当元素组成array1的时候引用计数已经+1了,array1 执行copy操作的时候元素的引用计数并没有发生改变,array1执行mutablecopy
的时候数组元素的自动引用计数+1 大家可以验证下strong对数组元素引用计数的影响,(注:没有影响)大家可以验证下。
更多技术干货文章可以扫描下方二维码:
在这里插入图片描述

发布了231 篇原创文章 · 获赞 110 · 访问量 60万+

猜你喜欢

转载自blog.csdn.net/HHL110120/article/details/101114377