Sna*_*ing 4 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]);
Run Code Online (Sandbox Code Playgroud)
输出:dic1:2 dic2:4 dic3:1 dic4:3
可变对象之间的差异是什么,保留计数和不可变对象保留计数?请给我解决方案...
如果添加以下行
NSLog(@"%p %p %p", [NSArray new], [NSArray new], [NSArray new]);
Run Code Online (Sandbox Code Playgroud)
然后你会注意到所有的指针值都是相同的(并且dic1的初始值上升了3,现在从5开始).这意味着[[NSArray alloc] init]实际上并没有分配任何东西,只是保留了一些永远存活的单例并返回它.
永远不要依赖于value retainCount,因为对象可能在运行时和框架内部保留.有些物体甚至可能没有保留计数器.这也意味着您不应期望release可预测会导致释放.
| 归档时间: |
|
| 查看次数: |
253 次 |
| 最近记录: |