首頁  >  問答  >  主體

ios - 切換根視圖控制器後如何釋放掉上一個視圖控制器?

比如說:啟動APP後進入的第一個VC是廣告VC,這個時候的根視圖控制器是廣告VC,幾秒後跳到主頁VC,這時候我將根視圖控制器切換到主頁VC。由於我不再需要回到廣告VC,所以我想將廣告VC釋放掉,有什麼辦法?
解決過這種問題的同學分享下。

扔个三星炸死你扔个三星炸死你2690 天前1346

全部回覆(2)我來回復

  • 给我你的怀抱

    给我你的怀抱2017-07-01 09:14:25

    最早我測試過這種情況,這樣的廣告VC並不會被自動釋放,也就是說一直佔用著內存,不過相當少而已

    你可以找到廣告vc的指標變量,設為nil,此操作應在下一個介面出現之後再進行以避免視圖突然變換

    另一種,可以在廣告vc的生命週期方法viewDidDisappear方法中,手動清除控制指針,如self.view = nil,廣告的UIImageView,另外由於廣告只需加載一次且是大控件圖,最好使用contentsOfFile方式

    回覆
    0
  • 代言

    代言2017-07-01 09:14:25

    直接修改WindowrootController可以釋放之前的廣告VC.

    - (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;
    }

    回覆
    0
  • 取消回覆