iOS 保留计数
iOS Retain count
下面代码片段中 val 和 arr 的保留计数是多少?
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;
我对保留计数感到困惑有人帮我解释一下
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,保留:增加引用计数。
复制:创建另一个 Counting = 1 的对象,而不是增加复制对象的 Counting
发布:减少引用计数。
ARC模式下,不用调用release,只需要设置pointer = nil即可。如果没有指针处理,对象将被释放。
下面代码片段中 val 和 arr 的保留计数是多少?
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;
我对保留计数感到困惑有人帮我解释一下
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,保留:增加引用计数。
复制:创建另一个 Counting = 1 的对象,而不是增加复制对象的 Counting
发布:减少引用计数。
ARC模式下,不用调用release,只需要设置pointer = nil即可。如果没有指针处理,对象将被释放。