Ran*_*wan 1 iphone objective-c count
我已经习惯[anArray retainCount]了数组的保留计数..(我知道不应该使用这个,但我只是用于学习保留概念)
以下是我的代码.
NSString *str = [[NSString alloc] initWithFormat:@"a,b,c,d"];
NSArray *anArray =[[NSArray alloc]init];
NSLog(@"Retain count: %i", [anArray retainCount]);
anArray=[str componentsSeparatedByString:@","];
NSLog(@"Retain count: %i", [anArray retainCount]);
Run Code Online (Sandbox Code Playgroud)
产量
Retain count: 2
Retain count: 1
Run Code Online (Sandbox Code Playgroud)
我认为它应该相反但......
请不要自己一个忙,不看retainCount努力学习内存管理规则是如何工作的.请参阅友好的Apple 内存管理指南.
在你的例子中:
NSArray *anArray =[[NSArray alloc]init];
Run Code Online (Sandbox Code Playgroud)
你已经分配了"anArray"(通过调用alloc),所以你负责打电话release.
anArray=[str componentsSeparatedByString:@","];
Run Code Online (Sandbox Code Playgroud)
现在,您已经获得了一个新对象(泄漏原始对象,如seand所说).这次,您不拥有该对象(因为componentsSeparatedByString没有alloc或copy在其名称中),因此您不能释放它.
不要担心retainCount是什么; 倾向于你自己的编织和释放你应该和不释放你不拥有的对象的对象.
这一行... anArray = [str componentsSeparatedByString:@","];
你压缩了'anArray'的原始分配(从而造成了泄漏).在现实生活中,你首先想要[anArray发布].这就是保留计数回到1的原因.
| 归档时间: |
|
| 查看次数: |
630 次 |
| 最近记录: |