在UITabBar.h中,已签名的副本

@property(nonatomic,copy)NSArray *项目; //获取/设置可见

这是一个数组
“复制”是什么意思?
复制NSArray容器obj?
复制每个对象NSArray包含吗?
或者其他的东西。

所以有一个测试

UITabBar* testBar = [[UITabBar alloc] init];
UITabBarItem* item = [[UITabBarItem alloc] init];
NSArray* array = [[NSArray alloc] initWithObjects:item, nil];

NSLog(@"bar:%p,%d", testBar, testBar.retainCount);
NSLog(@"item:%p,%d", item, item.retainCount);
NSLog(@"array:%p,%d", array, array.retainCount);

testBar.items = array;

NSLog(@"that item:%p,%d", [testBar.items lastObject], [[testBar.items lastObject] retainCount]);
NSLog(@"testBar.items:%p,%d", testBar.items, testBar.items.retainCount);

结果

酒吧:0x96a9750,1

项目:0x96aa230,2

数组:0x96aa280,1

该项目:0x96aa230,2

testBar.items:0x96aa280,6

为什么容器数组和数组中的obj都没有被“复制”?

最佳答案

在这种情况下没有进行复制的原因是NSArray是不可变的。您无需对其进行复制即可防止对阵列进行更改,因为无法进行此类更改。保留相同的不变数组就足够了。

如果您尝试使用NSMutableArray进行此实验,则会得到不同的结果。

10-08 16:04