Why retainCount = 2 - after release?

我的未来我决定 提交于 2019-12-18 07:24:16

问题


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 retainCount]);

    [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?


回答1:


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.




回答2:


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.




回答3:


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.



来源:https://stackoverflow.com/questions/6276442/why-retaincount-2-after-release

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!