比如说:启动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.