【问题标题】:retain count for mutable and immutable object in objective c?在目标c中保留可变和不可变对象的计数?
【发布时间】:2012-03-30 07:12:06
【问题描述】:
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

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

【问题讨论】:

  • retainCount 没用。不要打扰它。

标签: objective-c retaincount


【解决方案1】:

如果添加以下行

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

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

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

【讨论】:

  • 您先生,启发了我。不知道它会缓存这样的数组。
【解决方案2】:

永远不要使用retainCount方法,因为它永远不会给出真正的值,因为对象的内部实现可能包含retains,所以你会有你的retains和系统的retains。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多