KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
This has implications on the way I interact with my modal controllers. When I first started out in iOS development, I assumed that UIViewController did not retain the modally presented view. Well, really it was more like I had no reason to assume it did retain them. This left me with fairly awkward attempts at releasing them when I knew they would have finished their dismissal animations: _myViewController = [[UIViewController alloc] init]; [self. present modalViewController:_myViewController animated:YES]; /* Some stuff, then in a different method all together, probably as the result of a delegate callback or something... */ [self dismissModalViewControllerAnimiated:YES]; [_myViewController performSelector:@selector(release) withObject:nil afterDelay:0.5f]; Then, I saw the modalViewController property of UIViewController and thought, "Man, I hope it retains that property when a modal view controller is presented." Sure enough, I logged the retain count on several of these attempts and noticed a general increase immediate after the call to presentModalViewController:animated: (I know, retain counts are not a perfect metric). So, somewhere along the line, I have started using a much nicer pattern where I assume that any controller object I present modally is retained by the presenting controller. This lets me write the standard present code: UIViewController* myViewController = [[UIViewController alloc] init]; [self presentModalViewController:myViewController animated:YES]; [myViewController release]; // <- Fire and forget! Now, of course, there is no awkwardness: no need to wait for an animation to finish, or even keep a reference to the presented controller if I don't need it. I can blindly dismiss it later and not worry about leaking. I like it. I have logged many a dealloc in my modally presented controllers a
Tags (comma-separated)
Save Edits
Cancel