Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

Wunk

macrumors newbie
Original poster
Nov 17, 2008
24
0
Netherlands
I'm using presentModalViewController to pop a new viewcontroller into display which loads certain things like a UIWebView or a remote UIImage. To dismiss these I call
Code:
[self dismissModalViewControllerAnimated:YES];

This works just fine, but it doesn't actually unload or free the current viewController. Except for the obvious memory hog this will cause eventually, it's also a pain when loading a UIWebView, the first time it'll properly load the selection you made, but dismissing it and calling that same ModalViewController with a new selection will keep the old UIWebView loaded.

What's the proper way to unload these viewcontrollers so that they get re-initialized upon calling them again ?
 

Wunk

macrumors newbie
Original poster
Nov 17, 2008
24
0
Netherlands
Well this kind of works.., but there's got to be a better way :)

Code:
- (void)viewDidDisappear:(BOOL)animated {
	NSLog(@"Release HTML view");
	[super didReceiveMemoryWarning]; 
}
 

PhoneyDeveloper

macrumors 68040
Sep 2, 2008
3,114
93
The view controller will be dealloced when it's popped if you've set things up that way. That's how I prefer to do it. Is that not your intent? How are you displaying the view in the first place?
 

Wunk

macrumors newbie
Original poster
Nov 17, 2008
24
0
Netherlands
The main nib is a UIViewController with UIButtons in an interface tied to an IBAction that calls functions like:

Code:
- (IBAction)loadcolumn:(id)sender {
	NSLog(@"Column button pressed");
	[self presentModalViewController:AddColumnController animated:YES];
}

This will pop up a ViewController tied to another nib in an animation from below to a new new class which holds something like a UIWebView

That class has a function which is tied to a button that says:
Code:
- (IBAction)gaTerug:(id)sender {
	NSLog(@"Backbutton column pressed");
	[self dismissModalViewControllerAnimated:YES];
}

But dismissing it will not unload it, pressing the button again will pop up the previously saved view and in case of a UIWebView it'll not re-initalize the 'viewDidLoad' function with the new NSURL value..
 

PhoneyDeveloper

macrumors 68040
Sep 2, 2008
3,114
93
So instead of that just build the modal view controller when you need it.

Code:
MyViewController* controller = [[MyViewController alloc] init];
[self presentModalViewController: controller animated:YES];
[controller release];

Then when it's popped it will be dealloced.

Do you just load up all the view controllers when your main view controller loads? That will use up a lot of memory.
 

Wunk

macrumors newbie
Original poster
Nov 17, 2008
24
0
Netherlands
Hm, I'll try that, thanks..

And I thought viewcontrollers don't get loaded until they're actually called, I need to doublecheck that indeed and change the function where needed.


Basically there's a
Code:
IBOutlet ColumnViewController *AddColumnController;

In the main viewcontroller's .h file which is tied to a button through Interface Builder, I didn't think it'd preload all these viewcontrollers in advance but instead would only initialize them as soon as the button was pressed..
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.