【问题标题】:iOS Retain countiOS 保留计数
【发布时间】:2015-09-04 09:16:17
【问题描述】:

下面代码 sn-p 中 val 和 arr 的 retain count 是多少?

NSString *val=@"qaz";

NSMutableArray *arr=[[NSMutableArray alloc]init];

[arr addObject:val]; 

考虑到我们在 MRC。

str1,str2,str3 和 str4 的保留计数是多少?

NSString *str1=[[NSString alloc]initwithString:@"str"];

NSString * str2=[str1 copy];

NSString * str3=[str1 retain];

NSString * str4=str3;

我对保留计数感到困惑,有人帮我解释一下

【问题讨论】:

标签: ios objective-c reference-counting


【解决方案1】:
NSString *val=@"qaz"; // @"qaz" Counting = 1, handled by val

NSMutableArray *arr=[[NSMutableArray alloc]init]; // NSMutableArray Counting = 1, handled by arr

[arr addObject:val];  // nothing changes

MRC

NSString *str1=[[NSString alloc]initwithString:@"str"];  // @"str" Counting = 1

NSString * str2=[str1 copy]; // @"str" Counting = 1; the "copy @"str"" Counting = 1 handled by str2    
NSString * str3=[str1 retain]; // @"str" Counting = 2; the "copy @"str"" Counting = 1 

NSString * str4=str3; // nothing changes

Alloc/init,retain:增加引用计数。

复制:创建另一个 Counting = 1 的对象,不增加复制对象的计数

发布:减少引用计数。

在ARC模式下,你不必调用release,只需要设置pointer = nil。如果没有指针处理,对象将被释放。

【讨论】:

猜你喜欢
  • 2011-10-21
  • 2011-07-28
  • 1970-01-01
  • 2014-03-28
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多