比如說:啟動APP後進入的第一個VC是廣告VC,這個時候的根視圖控制器是廣告VC,幾秒後跳到主頁VC,這時候我將根視圖控制器切換到主頁VC。由於我不再需要回到廣告VC,所以我想將廣告VC釋放掉,有什麼辦法? 解決過這種問題的同學分享下。
最早我測試過這種情況,這樣的廣告VC並不會被自動釋放,也就是說一直佔用著內存,不過相當少而已
你可以找到廣告vc的指標變量,設為nil,此操作應在下一個介面出現之後再進行以避免視圖突然變換
nil
另一種,可以在廣告vc的生命週期方法viewDidDisappear方法中,手動清除控制指針,如self.view = nil,廣告的UIImageView,另外由於廣告只需加載一次且是大控件圖,最好使用contentsOfFile方式
viewDidDisappear
self.view = nil
UIImageView
contentsOfFile
直接修改Window的rootController可以釋放之前的廣告VC.
Window
rootController
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { _window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; _window.backgroundColor = [UIColor whiteColor]; _window.rootViewController = [ADViewController new]; [_window makeKeyAndVisible]; // 2.0秒后跳转到mainController dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ MainViewController *VC = [MainViewController new]; // 修改 rootViewController 后, ADViewController会释放 _window.rootViewController = VC; }); return YES; }
最早我測試過這種情況,這樣的廣告VC並不會被自動釋放,也就是說一直佔用著內存,不過相當少而已
你可以找到廣告vc的指標變量,設為
nil
,此操作應在下一個介面出現之後再進行以避免視圖突然變換另一種,可以在廣告vc的生命週期方法
viewDidDisappear
方法中,手動清除控制指針,如self.view = nil
,廣告的UIImageView
,另外由於廣告只需加載一次且是大控件圖,最好使用contentsOfFile
方式直接修改
Window
的rootController
可以釋放之前的廣告VC.