Please check my approach concerning release of both UIPopoverController and loadViewController
- (IBAction) manageCardSets:(UIBarButtonItem*)baritem {
LoadViewController *loadViewController = [[LoadViewController alloc] initWithStyle:UITableViewStylePlain];
self.loadPopover = [[UIPopoverController alloc] initWithContentViewController:loadViewController];
self.loadPopover.delegate = self;
[self.loadPopover presentPopoverFromBarButtonItem:baritem permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
[loadViewController release];
}
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
[popoverController.contentViewController release];
self.loadPopover = nil;
[_loadPopover release];
}
As you can see I release loadViewController twice and the code works, no leaks, but I have some doubts.
If I release it once, than the dealloc is not called in loadViewController.
If your
loadPopoverproperty is retain/copy, the following line is over-retaining the object and leaking:Both, alloc-init and the property accessor retain the object. This should be:
This is why the
loadPopoverobject only gets deallocated if you send it two release messages but you should never resort to these tricks.EDIT:
You also have another memory management problem. You are releasing an object you do not own in this line:
It is the
popoverControllerresponsability to retain/release thecontentViewController. By doing this you are over-releasing thecontentViewController.To sum up, your code would look like this: