I’ve been cleaning up my code and so far so good, and I only have one leak left to take care of; the one I can’t find!
Instruments points me to the following code in my UITableViewController:
- (void)viewDidLoad
{
[super viewDidLoad];
self.parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
self.parentView.backgroundColor = [UIColor clearColor];
self.parentView.opaque = NO;
self.mainButton = [UIButton buttonWithType:UIButtonTypeCustom];
[self.mainButton setTitleColor:[UIColor colorWithRed:0.16f green:0.16f blue:0.16f alpha:1.0] forState:UIControlStateNormal];
[self.mainButton setTitleShadowColor:[UIColor whiteColor] forState:UIControlStateNormal];
self.mainButton.titleLabel.shadowOffset = CGSizeMake(0.0, 1.0);
[self.mainButton setBackgroundImage:[UIImage imageNamed:@"grayButton.png"] forState:UIControlStateNormal];
self.mainButton.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14];
self.mainButton.frame = CGRectMake(0, 4, 102, 35);
self.mainButton.center = CGPointMake(160, 25);
[self.mainButton setTitle:@"Control" forState:UIControlStateNormal];
[self.mainButton addTarget:self action:@selector(controlIt) forControlEvents:UIControlEventTouchUpInside];
[self.parentView addSubview:self.mainButton];
self.tableView.tableHeaderView = self.parentView;
}
parentView is released in dealloc. I’ve also released mainButton but I’m not sure it’s needed in this case.
I’m wondering if it has something to do with this line:
self.tableView.tableHeaderView = self.parentView;
The odd thing is, that the leak points to an address which I think is the main view of the view controller because it has over 75 entries of memory retains/release/autorelease in it’s history.
Really stuck on this one, would appreciate some guidance.
The line you pointed out IS the problem. By setting your parentView as another property, it still will have a retain count of +1 and that leaks. Set that property to nil in -dealloc.