为什么retainCount返回2

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?

Vik*_*ica 8

唯一有效的答案:永远不要检查,使用,信任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)