Why retainCount = 2 - after release?
I use this code.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
view = [[UIView alloc] init];
[_window addSubview:view];
[view release];
NSLog(@"count - %d", [view ret开发者_StackOverflow社区ainCount]);
[self.window makeKeyAndVisible];
return YES;
}
- (IBAction)click{
NSLog(@"count - %d", [view retainCount]);
}
When i click to uibutton - my view retain count = 2. Why is this happening?
Please do not count on retainCount. Fire up Instruments and see if there is a leak. Apple discourages the use of retainCount for debugging purposes:
Important: This method is typically of no value in debugging memory management issues. Because any number of framework objects may have retained an object in order to hold references to it, while at the same time autorelease pools may be holding any number of deferred releases on an object, it is very unlikely that you can get useful information from this method.
Have a look at the NSObjectProtocol and the retainCount documentation. Read the Memory Management Programming Guide for a deeper understanding of retain counts.
If I am not mistaken, it could be retained by _window
or other objects, so if you call [view retainCount];
in dealloc
method you'll probably get retain count = 0
.
As Nick Weaver said, don't use retainCount
in any way then detecting leaks while debugging memory issues.
It is better we not mind value of retainCount. Simply follow the memory management rules - take ownership when you need them, relinquish ownership when you are finished, and you will not have a problem.
If you are looking at retainCount, you are going about things the wrong way, and you will simply confuse yourself .
The only rule about the amount of times you can retain an object is that each retain must be balanced with a release.
精彩评论