首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

viewDidUnload,viewWillDisappear未在tabBarContoller中调用

首先,我会解释一下这两个方法的用途。viewDidUnloadviewWillDisappear 是两个在 UIViewController 中用于处理视图生命周期事件的函数。viewDidUnload 在视图被释放之前调用,可以用于释放一些额外的资源。viewWillDisappear 在视图即将被隐藏之前调用,可以用于执行一些清理操作。

对于 viewDidUnload,您可以使用以下方法来代替:

代码语言:swift
复制
override func viewDidUnload() {
    super.viewDidUnload()

    // 释放资源
    // 例如:释放一些额外的数据或缓存
}

对于 viewWillDisappear,您可以使用以下方法来代替:

代码语言:swift
复制
override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    // 在视图即将被隐藏之前执行一些清理操作
    // 例如:释放一些额外的数据或缓存
}

至于 viewDidLoad,它总是在视图加载完成后调用。您可以在这个方法中执行一些初始化操作。

总的来说,这四个方法都是在视图的生命周期中调用的,您可以根据具体情况进行相应的处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

UIViewController的生命周期及iOS程序执行顺序

1)- (void)viewDidLoad; 一个APP在载入时会先通过调用loadView方法或者载入IB创建的初始界面的方法,将视图载入到内存。...2) - (void)viewDidUnload; 在内存足够的情况下,软件的视图通常会一直保存在内存,但是如果内存不够,一些没有正在显示的viewcontroller就会收到内存不够的警告,然后就会释放自己拥有的视图...另外,即使在设备上按了Home键之后,系统也不一定会调用这个方法,因为IOS4之后,系统允许将APP在后台挂起,并将其继续滞留在内存,因此,viewcontroller并不会调用这个方法来清除内存。...5) - (void)viewWillDisappear:(BOOL)animated; 在视图变换时,当前视图在即将被移除、或者被覆盖时,会调用这个方法进行一些善后的处理和设置。...释放对象所有权 <— 调用viewDidUnload <— 收到内存警告 <— 调用viewDidDisappear <— 调用viewWillDisappear <— APP需要调用另一个view

1.7K110

didReceiveMemoryWarning iOS开发

当重新显示该viewController时,执行过viewDidUnLoad的viewcontroller(即原来在后台)会重新调用loadview -> viewDidLoad。...在iOS 3.0以及更高版本,你应该重载viewDidUnload函数来释放任何对view的引用或者它里面的内容(子view等等)。 这个网上的资料都说的很不全面,尤其是蓝色字部分。...三、viewDidUnload 这个函数是viewDidLoad的对立函数。在程序内存欠缺时,这个函数被controller调用()。...另外:如果controller存储了其他object和view的引用,你还得在dealloc方法释放这些内存。对于iOS2.x,你还必须在调用super dealloc方法前将这些引用置为nil。...默认情况下不执行任何操作 viewDidAppear: 视图已完全过渡到屏幕上时调用 viewWillDisappear: 视图被驳回时调用,覆盖或以其他方式隐藏。

2.5K30
  • 程序启动的完整过程

    application:didFinishLaunchingWithOptions:方法 在application:didFinishLaunchingWithOptions:创建UIWindow 创建和设置...UIScreen mainScreen].bounds]; //创建跟控制器 UIViewController *VC = [[UIViewController alloc] init]; //加到窗口的跟控制器...self.window.rootViewController = VC; //把控制器的View加到窗口中,,不加到跟控制器也可以显示 //[self.window addSubview:rootVc.view...的生命周期 loadView viewDidLoad(view加载完毕) viewWillAppear(view即将显示到window) viewDidAppear(view显示完毕,已经显示到窗口) viewWillDisappear...view viewDidUnload(view销毁完毕) 处理应用程序的一些生命周期方法 // 程序启动完成的时候调用 // __func__:表示当前的方法在哪个类里面调用 // 程序加载完毕的时候调用

    1.5K150

    iOS 多个category同时交换同一个方法

    (包括交换后方法同名,交换后方法不同名) 结论: 1.如果交换后方法同名,最后只运行类的方法 2.如果交换后方法不同名,会倒叙执行文件的方法,如上:先执行2->1->宿主类 2.代码 2.1 RuntimeViewController...3.2 load的NSLog测试load方法都会执行,方法交换都会生效 控制台日志: RuntimeViewController load1 RuntimeViewController load2...category1方法交换 第一步交换 3与2交换,由于第一步2与1交换了,相当于3与1交换,即3指向了1指向的方法 第二步第一次交换...3与2交换,相当于是与1交换,即1指向了3 第二步交换完成 执行的顺序:3->2->1 1.首先调用的是类(1)的方法,相当于调用了3 2.3调了本身方法...,即调用了2方法 3.2再调了本身方法,即调了1方法 4.最后打印1的日志 理解了1,2,3的顺序,对号入座即可。

    1.4K10

    UI篇-VC的生命周期以及UIView的layoutSubviews和drawRect方法

    一个很常见的问题,我们需要在VC被销毁的时候处理一些事情,可是 viewWillDisappear 不管是入栈新的视图还是出栈当前视图都会被调用,无法判断,结合我之前说的原理,我们可以利用下面这个方法判断当前...- (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:YES]; if ([[self.navigationController...但是在VC,当前UIView的是在 viewDidLoad 执行后才初始化好的,所以我们会见到这样一个Bug,在VC初始化语句后面调用 一个 VC的绘制UI的方法,你会发现根本没有效果,这就是因为,VC...UIView中方法的执行顺序大概是这样的: init 方法 >>属性的set/get 方法>> layoutSubviews(当然是要达到触发条件)>>drawRect, 使用得当可以在View的调用起到很好的效果....这样可以在控制器设置一些值给View(如果这些View draw的时候需要用到某些变量 值). 2、该方法在调用sizeToFit后被调用,所以可以先调用sizeToFit计算出size。

    1.8K30

    ViewController及View的生命周期1. 起因2. Controller的生命周期3. View的生命周期4. 内存警告

    当触发侧滑返回时会调用系统自带的viewWillDisappear:方法。...iOS7新增加了导航控制器侧滑手势,当触发侧滑返回时,会调用系统的viewWillDisappear:方法,取消侧滑返回时又会调用viewWillAppear:方法。...isMovingFromParentViewController 会在viewWillDisappear & viewDidDisappear 方法内部调用这个方法判断视图控制器的视图的隐藏是否因为视图控制器从它的容器视图控制器移除...isBeingDismissed 会在viewWillDisappear & viewDidDisappear 方法内部调用这个方法判断视图控制器的视图的隐藏是否因为视图控制器被清退 (dismissed...实际开发为了写的少点,都会写在基类控制器。 官方说,iOS 6.0以后系统就不会自动清理,需要手动清理。

    1.4K30

    Runtime运用:埋点统计

    对应的返回上一个界面的方式是pop和dismiss,一般在pop或者dismiss方法调用之后,随后就会调用dealloc方法,将UIViewController内存情况,内存得到释放,如果无法调用dealloc...NSSelectorFromString(@"dealloc"), @selector(ht_dealloc)); } NSObject的load方法,在每个class导入的时候,只要实现了这方法,就会调用而且只调用一次这个方法...在load方法,将UIViewController的生命周期里的几个method都通过method swizzling替换成我们自定义的方法,在自定义的方法中进行埋点,从而达到统计和监测的目的。...其中ARC不能显式调用dealloc方法,所以用NSSelectorFromString来达到我们的目的 三、渲染时间统计 - (void)ht_ViewDidLoad{ long current...方法,我们可以通过判断self.isMovingFromParentViewController || self.isBeingDismissed来得知是否是被Pop或者dismiss。

    85120

    iOS导航栏切换界面时隐藏和显示

    但是如果同时还涉及到UITabbarController,就会有一些瑕疵,下面是要实现的效果,可以观察一下瑕疵在哪: 实现: 要实现这个简单的有无导航栏过渡其实很简单,直接在 viewWillAppear 和 viewWillDisappear...方法对导航栏进行显示和隐藏就可以了,为了到达比较平滑的效果,建议对是否动画的参数选择YES,否则显示界面后就会瞬间出现导航栏,而达不到平滑的效果。...animated]; [self.navigationController setNavigationBarHidden:YES animated:YES]; } - (void)viewWillDisappear...:(BOOL)animated { [super viewWillDisappear:animated]; [self.navigationController setNavigationBarHidden...UITabBarControllerDelegate 的代理中去做隐藏,并且分别是有动画和没动画,但是因为 Tabbar所包含的其实是 UINavigationController ,所以在点击 Tabbar 切换界面时两个代理方法都会被调用

    3.9K30

    iOS_Runtime是什么?原理?作用?怎么实现weak?使用

    就是在程序运行的过程,有一套C语言级别的API,它把代码从OC转换成C 2、原理: OC是基于C,并添加了面向对象的特性,将很多静态语言在编译和链接时做的事放到了runtime运行时来处理 C:函数的调用在编译时就知道会调用哪个函数...(我有在一次面试遇到) Runtime对注册的类会进行布局,对于weak对象会放入一个hash表,用weak指向的`对象的内存地址`作为key。...当对象的引用计数为0时会调用dealloc方法,此时会在weak表搜索,将所有weak对象置为nil。...:) bySwizzledSelector:@selector(mo_viewWillDisappear:)]; }); } - (void)mo_viewWillDisappear:(BOOL)...animated { [self mo_viewWillDisappear:animated]; // 添加埋点等 } `NSMutableArray`的`Category`里拦截增删改方法,进行判空处理

    36620

    【API使用系列】Notification消息通知专题

    1.1.2 ViewController不手动移除通知不挂机原因分析 现在我们在UIViewController中注册通知,不移除,看看会不会挂掉。...由于我们看不到源码,所以也不知道有没有调用。这个时候,我们可以从这个通知中心下手!!!怎么下手呢?...我只要证明UIViewController在销毁的时候调用了remove方法,就可以证明我们的猜想是对的了!这个时候,就需要用到我们强大的类别这个特性了。...:(BOOL)animated { [super viewWillDisappear :animated]; [[NSNotificationCenter defaultCenter]...你这边可要注意了,一定要成双成对出现,如果你只在viewWillAppear addObserver没有在viewWillDisappear removeObserver那么当消息发生的时候,你的方法会被调用多次

    40010

    iOS 点击通知打开对应页面

    应用还没有加载 这时如果点击通知的显示按钮,会调用didFinishLaunchingWithOptions,不会调用didReceiveRemoteNotification方法。...(2)点击关闭再点击应用,则上面两个方法都不会被调用这时,会调用applicationDidBecomeActive 解决方法 根据上面的三种情况可以总结一下 点击通知会根据app是否启动,未启用调用didFinishLaunchingWithOptions...selector: "notificationPushView", name: "notificationPushView", object: nil); } override func viewWillDisappear...self.performSegueWithIdentifier("songhuoSegue", sender: self); } 在didReceiveRemoteNotification方法,...在viewWillDisappear移除 否则每次接受到推送都会打开页面,当然也可以进行判断当前的页面已打开就不再打开 当然也可以不用通知去打开页面 像之前那种定义全局变量进行判断也是可以的

    2.5K20
    领券