在目标c中保留可变和不可变对象的计数?

时间:2012-03-30 07:12:07

标签: objective-c retaincount

NSArray *arr=[[NSArray alloc]init]; //Am getting all immutable objects allocation that retain count:2  
NSLog(@"dic1:%d",[arr retainCount]); 
[arr retain];
[arr retain];
[arr retain];
[arr release];
 NSLog(@"dic2:%d",[arr retainCount]);


NSMutableDictionary *dic=[[NSMutableDictionary alloc]init];//Am getting all mutable objects allocation that retain count:1  
NSLog(@"dic3:%d",[dic retainCount]);
[dic retain];
[dic retain];
[dic retain];
[dic release];
NSLog(@"dic4:%d",[dic retainCount]);

输出:dic1:2  DIC2:4  dic3:1  DIC4:3

可变对象之间的差异是什么,保留计数和不可变对象保留计数?请给我解决方案......

2 个答案:

答案 0 :(得分:6)

如果添加以下行

NSLog(@"%p %p %p", [NSArray new], [NSArray new], [NSArray new]);

然后您会注意到所有指针值都相同(而且dic1的初始值上升了3,现在从5开始)。这意味着[[NSArray alloc] init]实际上并没有分配任何东西,只是保留了一些永远存活的单例并返回它。

从不依赖retainCount的值,因为对象可能由运行时和框架在内部保留。有些物体甚至可能没有保留计数器。这也意味着您不应期望release可预测会导致释放。

答案 1 :(得分:0)

永远不要使用retainCount方法,因为它永远不会提供真实值,因为对象的内部实现可能包含retain s,因此您将拥有retain和系统的retain s。