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

UIViewController:调用viewWillAppear,而不是viewDidAppear

UIViewController是iOS开发中的一个类,它是视图控制器的基类。视图控制器用于管理应用程序的用户界面,并处理与界面相关的逻辑。

调用viewWillAppear而不是viewDidAppear是因为viewWillAppear在视图即将显示之前被调用,而viewDidAppear在视图已经显示之后被调用。这两个方法是UIViewController生命周期中的两个重要方法。

  • viewWillAppear方法会在视图即将显示之前被调用,可以在这个方法中进行一些准备工作,例如更新数据、设置界面元素的初始状态等。它通常用于处理与界面相关的逻辑的初始化操作。
  • viewDidAppear方法会在视图已经显示之后被调用,可以在这个方法中执行一些需要在视图显示后才能进行的操作,例如启动动画、请求网络数据等。它通常用于处理与界面相关的逻辑的后续操作。

调用viewWillAppear而不是viewDidAppear的一个常见场景是在视图控制器的生命周期中需要提前进行一些准备工作,以避免用户在界面显示之前看到不完整或不准确的数据。另外,如果在viewWillAppear中执行的操作比较耗时,可能会导致界面显示的延迟,因此需要根据具体情况进行权衡和优化。

腾讯云提供了一系列与云计算相关的产品,可以帮助开发者构建和管理云端应用。具体推荐的产品和产品介绍链接地址如下:

以上是腾讯云提供的一些与云计算相关的产品,可以根据具体的需求选择适合的产品来支持开发工作。

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

相关·内容

Runtime运用:埋点统计

2、渲染时间 在UIViewController的生命周期中,Viewdidload和Viewdidappear之间的时间可以认为是“UI渲染时间”,我们可以通过统计二者之间的时间差距来统计页面的渲染时间...对应的返回上一个界面的方式是pop和dismiss,一般在pop或者dismiss方法调用之后,随后就会调用dealloc方法,将UIViewController内存情况,内存得到释放,如果无法调用dealloc...:), @selector(ht_viewWillAppear:)); monitor_exchangeInstanceMethod([self class], @selector(viewDidAppear...注意从下一个界面返回这个界面时也会调用viewdidappear,需要避免这个统计。...四、内存泄漏 因为UIViewController得不到释放造成内存泄漏的情景有三种 NSTimer NSTimer:一方面,NSTimer经常会被作为某个类的成员变量,NSTimer初始化时要指定

86420

UIViewController生命周期

合创建一些附加的view和控件 3、ViewWillAppear 在视图加载完成,并即将显示在屏幕上时,会调用viewWillAppear方法,在这个方法里,可以改变当前屏幕方向或状态栏的风格等。...4、viewWillLayoutSubviews 即将开始子视图位置布局 5、ViewDidLayoutSubviews 用于通知视图的位置布局已经完成 6、ViewDidAppearviewWillAppear...方法执行完后,系统会执行viewDidAppear方法。...都会被调用第二次(viewA已经有了viewB)只调用viewB的 view的Frame变化会触发layoutSubviews 滚动一个UIScrollView会触发layoutSubviews 旋转...,可以简单理解为显示在最前面的window为keywindow) Push到下一层的顺序 viewWillDisappear->viewWillAppear->viewDidDisappear->viewDidAppear

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

    当我们创建一个UIViewController类的对象时,通常系统会生成几个默认的方法,这些方法大多与视图的调用有关,但是在视图调用时,这些方法的调用顺序如何,需要整理下。...通常上述方法包括如下几种,这些方法都是UIViewController类的方法: - (void)viewDidLoad; - (void)viewDidUnload; - (void)viewWillAppear...这个方法通常并不会在视图变换的时候被调用只会在系统退出或者收到内存警告的时候才会被调用。 但是由于我们需要保证在收到内存警告的时候能够对其作出反应,所以这个方法通常我们都需要去实现。...3)- (void)viewWillAppear:(BOOL)animated; 系统在载入所有数据后,将会在屏幕上显示视图,这时会先调用这个方法。...上述方法的流程图可以简单用如下表示: 运行APP —> 载入视图 —> 调用viewDidLoad方法 —> 调用viewWillAppear方法 —> 调用viewDidAppear方法 —> 正常运行

    1.9K110

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

    320.000000 h:568.000000 //viewDidAppear w:414.000000 h:672.000000 有没有发现在viewWillAppearviewDidAppear...的时候也有这种问题,如果在init中添加控件的话,那么self.frame.size.width也不一定是准确的宽度,一般解决方法是使用[UIScreen mainScreen].bounds.size.width不是...iOS7新增加了导航控制器侧滑手势,当触发侧滑返回时,会调用系统的viewWillDisappear:方法,取消侧滑返回时又会调用viewWillAppear:方法。...Default does nothing 对象的视图已经消失、被覆盖或是隐藏时调用. UIViewController类提供一些方法,用来判断为什么view外观发生更改。...ViewWillAppear:view将要显示 ViewWillLayoutSubViews:view将要布局子控件 ViewDidLayoutSubViews:view布局子控件完成 ViewDidAppear

    1.4K30

    Objective-C 的运行时中最具争议的黑魔法:Method Swizzling

    继承是另一种可行的方式,但是这要求所有被继承的视图控制器如 UIViewController, UITableViewController, UINavigationController 都在 viewDidAppear...现在,UIViewController 或其子类的实例对象在调用 viewWillAppear: 的时候会有 log 的输出。...在交换了方法的实现后,xxx_viewWillAppear:方法的实现已经被替换为了 UIViewController -viewWillAppear:的原生实现,所以这里并不是在递归调用。...由于 xxx_viewWillAppear: 这个方法的实现已经被替换为了 viewWillAppear: 的实现,所以,当我们在这个方法中再调用 viewWillAppear: 时便会造成递归循环。...理解实现原理:只是简单的拷贝粘贴交换方法实现的代码不去理解实现原理不仅会让 App 很脆弱,并且浪费了学习 Objective-C 运行时的机会。

    46210

    iOS 小技能:Method Swizzling (交换方法的IMP)

    交换两个方法的实现一般写在分类的load方法里面,因为load方法会在程序运行前加载一次,initialize方法会在类或者子类在 第一次使用的时候调用,当有分类的时候会调用多次。...但是会引发一个新的问题:前一个页面的viewWillAppear:、viewDidAppear:也无法触发。...例如:A Present B, 有时因为业务逻辑需要,必须在viewWillAppearviewDidAppear里写一些代码,当B 调用dismiss方法的时候, A的这个两个方法不会触发,...因此如果要求B 调用dismiss方法,A要执行viewWillAppear:、viewDidAppear:这个两个方法,这个时候要把B的modalPresentationStyle设置为:UIModalPresentationFullScreen...; // 3、 其他:如果要求 B既要半透明,dismiss时,A还要调用viewWillAppear:、

    1.7K10

    Cocoa编程中视图控制器与视图类详解

    其它三个都是通过对应的控制器类来完成工作,不是直接构建和管理视图。 ...设置导航栏的按钮并不是去设置导航栏本身。一切都是在被推入的UIViewController子类内部执行推入请求和相关导航栏的定制(如:右键按钮)。...注意:对于导航栏定制,对定制实际标题的最简单方式时使用子视图控制器不是导航项的title属性: C代码   self.title = @"Hello";   self.title = [[[NSBundle...• – viewWillAppear: • – viewDidAppear: • – viewWillDisappear: • – viewDidDisappear: • – shouldAutorotateToInterfaceOrientation...接着会调用视图的viewLoad->viewWillAppear->viewDidAppear. 6. 控制器视图消失过程    消失过程比较简单,不作说明。 7.

    5.1K50

    iOS 无侵入埋点组件总结

    事件的标识与参数信息都写在配置表中,通过动态下发配置表来实现埋点统计。 无埋点 无埋点并不是不需要埋点,更准确的说应该是“全埋”, 前端的任意一个事件都被绑定一个标识,所有的事件都别记录下来。...很容易想到的就是使用目标 view到根之间的每个节点的深度(层次)组成一个路径,节点的深度(层次)是指此节点在父节点中的 index。...埋点数据的数据又分为两种类型: 固定数据与可变的业务数据, 固定数据我们可以直接写到配置表中, 通过唯一标识来获取。...对于 UIViewController,hook 下 ViewDidAppear: 这个方法知道哪个页面显示了就足够了。...这样每个 UIViewController 生命周期到了 ViewWillAppear 都会执行埋点的方法。

    2.9K31

    iOS系统中导航栏的转场解决方案与最佳实践

    UINavigationBar 样式的数据就存储在 UIViewController 的 UINavigationItem 中。...试想一下,当我们的页面会跳到不同的地方时,我们是不是要在 viewWillAppear: 和 viewWillDisappear: 方法里面写上一堆的判断呢?...等到页面 B 调用 viewDidAppear: 的时候,转场库会将假的导航栏样式设置到真的导航栏中,并将假的导航栏从视图层级中移除,最终将真的导航栏显示出来。...等到页面 A 调用 viewDidAppear: 的时候,转场库会将假的导航栏样式设置到真的导航栏中,并将假的导航栏从视图层级中移除,最终将真的导航栏显示出来。...使用 setNavigationBarHidden:animated: 方法,不是 setNavigationBarHidden:。

    2.4K30

    iOS 开发:『Runtime』详解(二)Method Swizzling

    如果我们想要交换两个方法的实现,从而实现调用 - (void)originalFunction; 方法实际上调用的是 - (void)swizzledFunction; 方法,调用 - (void)swizzledFunction...这些注意事项并不是为了吓退初学者,而是为了更好的使用 Method Swizzling 这一利器。至于方案的选择,无论是选择哪种方案,我认为只有最适合项目的方案才是最佳方案。 ---- 3....但是这样的话,所有继承自 UIViewController 类自身的 viewWillAppear: 就失效了,不会被调用。 这就需要用 Method Swizzling 来实现了。...步骤如下: 在分类中实现一个自定义的xxx_viewWillAppear: 方法; 利用 Method Swizzling 将 viewDidAppear: 和自定义的 xxx_viewWillAppear...然后在 xxx_viewWillAppear: 中添加统计代码和调用xxx_viewWillAppear:实现; 因为两个方法发生了交换,所以最后实质是调用viewWillAppear: 方法。

    1.9K31
    领券