prz*_*eko 1 cocoa-touch memory-leaks memory-management objective-c ios
我有财产:
@property(nonatomic, retain) NSMutableArray *myvar;
Run Code Online (Sandbox Code Playgroud)
第一种情况:
myvar = [[NSMutableArray alloc] init];
NSLog(@retainCount: %i:", [myvar retainCount]);
Run Code Online (Sandbox Code Playgroud)
输出:
retainCount:1
第二种情况:
self.myvar = [[NSMutableArray alloc] init];
NSLog(@retainCount: %i:", [self.myvar retainCount]);
Run Code Online (Sandbox Code Playgroud)
输出:
retainCount:2
我的问题是:为什么在第二种情况下保留值是2?
唯一有效的答案:永远不要检查,使用,信任retainCount.它不用于调试或直接用于内存管理.
有用:http://www.whentouseretaincount.com
但在你的情况下:因为你没有使用ARC(否则编译不允许你使用它retainCount)你过度保留.
它留在这里 @property(nonatomic, retain) NSMutableArray *myvar;
和这里: self.myvar = [[NSMutableArray alloc] init];
做:
self.myvar = [[[NSMutableArray alloc] init] autorelease]; //will release once soon
Run Code Online (Sandbox Code Playgroud)
或者我最喜欢的,独立于ARC/MRC和简称
self.myvar = [NSMutableArray array]; // identical to the first example
Run Code Online (Sandbox Code Playgroud)
或者更明确
NSMutableArray *var = [[NSMutableArray alloc] init];
self.myvar = var;
[var release];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
475 次 |
| 最近记录: |