Custom UIButton Memory Management in dealloc

Posted by ddawber on Stack Overflow See other posts from Stack Overflow or by ddawber
Published on 2010-12-31T05:10:44Z Indexed on 2010/12/31 5:54 UTC
Read the original article Hit count: 239

I am hoping to clarify the processes going on here.

I have created a subclass of UIButton whose init method looks like this:

- (id)initWithTitle:(NSString *)title frame:(CGRect)btnFrame {
    self = [UIButton buttonWithType:UIButtonTypeCustom];
    [self setTitle:title forState:UIControlStateNormal];
    self.frame = btnFrame;
    return self;
}

In my view controller I am creating one of these buttons and adding it as a subview:

myButton = [[CustomButton alloc] initWithTitle:@"Title" frame:someFrame];
[self.view addSubview:myButton];

In the view controller's dealloc method I log the retain count of my button:

- (void)dealloc {
    NSLog(@"RC: %d", [myButton retainCount]); //RC = 2
    [super dealloc];
    NSLog(@"RC: %d", [myButton retainCount]); //RC = 1
}

The way I understand it, myButton is not actually retained, even though I invoked it using alloc, because in my subclass I created an autorelease button (using buttonWithType:).

In dealloc, does this mean that, when dealloc is called the superview releases the button and its retain count goes down to 1? The button has not yet been autoreleased?

Or do I need to get that retain count down to zero after calling [super dealloc]?

Cheers.

© Stack Overflow or respective owner

Related posts about iphone

Related posts about ios