From 2834b693183246ed58d289caed0f3ac1f6ef336f Mon Sep 17 00:00:00 2001 From: Yann Diorcet Date: Mon, 22 Oct 2012 12:03:34 +0200 Subject: [PATCH] Fix memorywarning cache flush --- .../LinphoneUI/UICompositeViewController.h | 4 +-- .../LinphoneUI/UICompositeViewController.m | 28 +++++++++++-------- Classes/PhoneMainView.m | 4 +++ Classes/SettingsViewController.m | 2 +- 4 files changed, 23 insertions(+), 15 deletions(-) diff --git a/Classes/LinphoneUI/UICompositeViewController.h b/Classes/LinphoneUI/UICompositeViewController.h index ec1a1cbfb..faef77352 100644 --- a/Classes/LinphoneUI/UICompositeViewController.h +++ b/Classes/LinphoneUI/UICompositeViewController.h @@ -74,8 +74,6 @@ - (UIViewController *)getCachedController:(NSString*)name; - (UIViewController *)getCurrentViewController; - (UIInterfaceOrientation)currentOrientation; -#ifdef DEBUG -- (void)clearCache; -#endif +- (void)clearCache:(NSArray*)exclude; @end diff --git a/Classes/LinphoneUI/UICompositeViewController.m b/Classes/LinphoneUI/UICompositeViewController.m index a415343f0..775e8c1eb 100644 --- a/Classes/LinphoneUI/UICompositeViewController.m +++ b/Classes/LinphoneUI/UICompositeViewController.m @@ -244,11 +244,6 @@ return NO; } -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - [self clearCache]; -} - #pragma mark - Event Functions @@ -265,18 +260,29 @@ #pragma mark - -- (void)clearCache { +- (void)clearCache:(NSArray *)exclude { for(NSString *key in [viewControllerCache allKeys]) { - UIViewController *vc = [viewControllerCache objectForKey:key]; - if(vc != self.stateBarViewController && - vc != self.tabBarViewController && - vc != self.contentViewController) { + bool remove = true; + if(exclude != nil) { + for (UICompositeViewDescription *description in exclude) { + if([key isEqualToString:description.content] || + [key isEqualToString:description.stateBar] || + [key isEqualToString:description.tabBar] + ) { + remove = false; + break; + } + } + } + if(remove) { + [LinphoneLogger log:LinphoneLoggerDebug format:@"Free cached view: %@", key]; + UIViewController *vc = [viewControllerCache objectForKey:key]; if ([[UIDevice currentDevice].systemVersion doubleValue] >= 5.0) { [vc viewWillUnload]; } [vc viewDidUnload]; + [viewControllerCache removeObjectForKey:key]; } - [viewControllerCache removeObjectForKey:key]; } } diff --git a/Classes/PhoneMainView.m b/Classes/PhoneMainView.m index ed00dd10f..82ff165f4 100644 --- a/Classes/PhoneMainView.m +++ b/Classes/PhoneMainView.m @@ -267,6 +267,10 @@ static PhoneMainView* phoneMainViewInstance=nil; return [mainViewController currentOrientation]; } +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + [mainViewController clearCache:viewStack]; +} #pragma mark - Event Functions diff --git a/Classes/SettingsViewController.m b/Classes/SettingsViewController.m index 035c11cd3..85b897daa 100644 --- a/Classes/SettingsViewController.m +++ b/Classes/SettingsViewController.m @@ -639,7 +639,7 @@ static UICompositeViewDescription *compositeDescription = nil; [[LinphoneManager instance] destroyLibLinphone]; [LinphoneManager instanceRelease]; } else if([key isEqual:@"clear_cache_button"]) { - [[PhoneMainView instance].mainViewController clearCache]; + [[PhoneMainView instance].mainViewController clearCache:[NSArray arrayWithObject:[[PhoneMainView instance] currentView]]]; } else if([key isEqual:@"battery_alert_button"]) { [[UIDevice currentDevice] _setBatteryState:UIDeviceBatteryStateUnplugged]; [[UIDevice currentDevice] _setBatteryLevel:0.09f];