objective-c - 在 objective-c 中保留可变和不可变对象(immutable对象)的计数?

标签 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

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

最佳答案

如果添加以下行

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

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

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

关于objective-c - 在 objective-c 中保留可变和不可变对象(immutable对象)的计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9938489/

相关文章:

objective-c - 什么决定了 UITableView 的边距有多高和多宽? (见图)

objective-c - "at sign"@ 在此 Objective-C 代码中意味着什么

iphone - 改变高度时按比例调整 UIImageView 的宽度

objective-c - 圆弧 : __bridge versus __bridge_retained using contextInfo test case

objective-c - 以编程方式检测对象层次结构中的保留周期的策略可能是什么?

objective-c - RetainCount 可以在这种情况下使用吗?

objective-c - 这增加了保留计数 : alloc or init?

objective-c - NSAlert 显示错位的按钮

objective-c - block 捕获对象的过度释放问题;保留计数从 +2 直接跳到 0!

iPhone App 与服务器连接以下载内容