先上代码:
NSMutableArray *muary = [[NSMutableArray alloc]init];
NSMutableString *string3 = [[NSMutableString alloc]initWithString: @"muTableString"];
[muary addObjectsFromArray:@[@"1",@"2",@"3",@"4",@"5",@"123456789",@"12345678901",@"4",string3]];
NSArray *ary1; //直接赋值
NSArray *ary2; //mutableCopy
NSMutableArray *muary1;
NSMutableArray *muary2;
NSLog(@"地址:%p,%p,%p,%p,%p,%p",string3,muary,ary1,ary2,muary1,muary2);
int muaryNumber = CFGetRetainCount((__bridge CFTypeRef)(muary));
NSLog(@"初始计数%d",muaryNumber);
ary1 = muary;
muaryNumber = CFGetRetainCount((__bridge CFTypeRef)(muary));
NSLog(@"直接赋值给不可变数组ary1后的计数%d",muaryNumber);
ary2 = [muary mutableCopy];
muaryNumber = CFGetRetainCount((__bridge CFTypeRef)(muary));
NSLog(@"mutableCopy赋值给不可变数组ary2后的计数%d",muaryNumber);
muary1 = muary;
muaryNumber = CFGetRetainCount((__bridge CFTypeRef)(muary));
NSLog(@"直接赋值给可变数组muary1后的计数%d",muaryNumber);
muary2 = [muary mutableCopy];
muaryNumber = CFGetRetainCount((__bridge CFTypeRef)(muary));
NSLog(@"mutableCopy赋值给可变数组muary2后的计数%d",muaryNumber);
NSLog(@"地址:%p,%p,%p,%p,%p,%p,",string3,muary,ary1,ary2,muary1,muary2);
[string3 appendString:@"添加长度"];
NSLog(@"更改string3后\n%@\n%@\n%@\n%@\n%@",muary,ary1,ary2,muary1,muary2);
[muary addObject:@"123"];
NSLog(@"添加元素后\n%@\n%@\n%@\n%@\n%@",muary,ary1,ary2,muary1,muary2);
[muary removeObjectAtIndex:3];
NSLog(@"删除重复元素后\n%@\n%@\n%@\n%@\n%@",muary,ary1,ary2,muary1,muary2);
[muary replaceObjectAtIndex:1 withObject:@"YES"];
NSLog(@"替换o某一元素后\n%@\n%@\n%@\n%\n%@",muary,ary1,ary2,muary1,muary2);
运行结果:
2020-04-07 12:29:07.623209+0800 WKWebViewDemo[17220:6371539] 地址:0x28326b090,0x28326afd0,0x0,0x0,0x0,0x0
2020-04-07 12:29:07.623540+0800 WKWebViewDemo[17220:6371539] 初始计数1
2020-04-07 12:29:07.623617+0800 WKWebViewDemo[17220:6371539] 直接赋值给不可变数组ary1后的计数2
2020-04-07 12:29:07.623706+0800 WKWebViewDemo[17220:6371539] mutableCopy赋值给不可变数组ary2后的计数2
2020-04-07 12:29:07.623774+0800 WKWebViewDemo[17220:6371539] 直接赋值给可变数组muary1后的计数3
2020-04-07 12:29:07.623843+0800 WKWebViewDemo[17220:6371539] mutableCopy赋值给可变数组muary2后的计数3
2020-04-07 12:29:07.623948+0800 WKWebViewDemo[17220:6371539] 地址:0x28326b090,0x28326afd0,0x28326afd0,0x2832b0240,0x28326afd0,0x2832b0300,
2020-04-07 12:29:14.154687+0800 WKWebViewDemo[17220:6371539] 更改string3后
(
1,
2,
3,
4,
5,
123456789,
12345678901,
4,
"muTableString\U6dfb\U52a0\U957f\U5ea6"
)
(
1,
2,
3,
4,
5,
123456789,
12345678901,
4,
"muTableString\U6dfb\U52a0\U957f\U5ea6"
)
(
1,
2,
3,
4,
5,
123456789,
12345678901,
4,
"muTableString\U6dfb\U52a0\U957f\U5ea6"
)
(
1,
2,
3,
4,
5,
123456789,
12345678901,
4,
"muTableString\U6dfb\U52a0\U957f\U5ea6"
)
(
1,
2,
3,
4,
5,
123456789,
12345678901,
4,
"muTableString\U6dfb\U52a0\U957f\U5ea6"
)
2020-04-07 12:29:59.970575+0800 WKWebViewDemo[17220:6371539] 添加元素后
(
1,
2,
3,
4,
5,
123456789,
12345678901,
4,
"muTableString\U6dfb\U52a0\U957f\U5ea6",
123
)
(
1,
2,
3,
4,
5,
123456789,
12345678901,
4,
"muTableString\U6dfb\U52a0\U957f\U5ea6",
123
)
(
1,
2,
3,
4,
5,
123456789,
12345678901,
4,
"muTableString\U6dfb\U52a0\U957f\U5ea6"
)
(
1,
2,
3,
4,
5,
123456789,
12345678901,
4,
"muTableString\U6dfb\U52a0\U957f\U5ea6",
123
)
(
1,
2,
3,
4,
5,
123456789,
12345678901,
4,
"muTableString\U6dfb\U52a0\U957f\U5ea6"
)
2020-04-07 12:29:59.971163+0800 WKWebViewDemo[17220:6371539] 删除重复元素后
(
1,
2,
3,
5,
123456789,
12345678901,
4,
"muTableString\U6dfb\U52a0\U957f\U5ea6",
123
)
(
1,
2,
3,
5,
123456789,
12345678901,
4,
"muTableString\U6dfb\U52a0\U957f\U5ea6",
123
)
(
1,
2,
3,
4,
5,
123456789,
12345678901,
4,
"muTableString\U6dfb\U52a0\U957f\U5ea6"
)
(
1,
2,
3,
5,
123456789,
12345678901,
4,
"muTableString\U6dfb\U52a0\U957f\U5ea6",
123
)
(
1,
2,
3,
4,
5,
123456789,
12345678901,
4,
"muTableString\U6dfb\U52a0\U957f\U5ea6"
)
2020-04-07 12:30:02.396001+0800 WKWebViewDemo[17220:6371539] 替换o某一元素后
(
1,
YES,
3,
5,
123456789,
12345678901,
4,
"muTableString\U6dfb\U52a0\U957f\U5ea6",
123
)
(
1,
YES,
3,
5,
123456789,
12345678901,
4,
"muTableString\U6dfb\U52a0\U957f\U5ea6",
123
)
(
1,
2,
3,
4,
5,
123456789,
12345678901,
4,
"muTableString\U6dfb\U52a0\U957f\U5ea6"
)
(
1,
YES,
3,
5,
123456789,
12345678901,
4,
"muTableString\U6dfb\U52a0\U957f\U5ea6",
123
)
(lldb)

结论:
mutableCopy 不会增加引用计数,同时会生成新的数组,但数组内的元素并不会生成拷贝。
网友评论