Background
: I have a tab bar application. Each tab contains navigation controller allowing the user to transition from one view to the other showing a drill down information of the data (each view is being handled by a view controller and each view controller class has -didReceiveMemoryWarning
method). Lists are populated by pulling the data from web services.
Problem
: When i use "Hardware > Simulate Memory Warning"
option of iPhone Simulator
, the -didReceiveMemoryWarning
method is called for ALL my view controllers - even the one which the user is viewing. I don't want to clear any content which is being used by the active view controller. How can i achieve that?
Which method should have the implementation to reload the data after the data was released because of memory warning? (I see that the view controller classes that contain a table view call -viewDidLoad
method when user comes back to that view, but if the view contains (say UIWebView) then -viewDidLoad
method is not called. Why is that?)
Editted (Friday 30 January 2009 - 03:10 PM)
Note: I'm using Interface builder for creating views. and loadView method is commented out.
So, when a view controller receives a memory warning message, these are the steps that are carried out:
- Following method is called:
- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; }
As a result of call to
[super didReceiveMemoryWarning]
,[self setView:nil]
gets automatically called?If any resources should be cleared, then
-setView
method should be overwritten to clear local resources.[self setView:nil]
is not called if the view is currently active (By default). Right? - I'm really curious which method takes this decision and how?
Can you please confirm. Plus i was getting an error following this approach but adding myObject = nil after releasing myObject in dealloc method of controller class fixed the issue. Thanks.