`
啸笑天
  • 浏览: 3462414 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

UIViewController各个方法的加载顺序

 
阅读更多

 

加载过程:

一般情况下调用 init方法或者调用initWithNibName方法实例化UIViewController, 不管调用哪个方法都为调用initWithNibName(方法定义如下)

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

接着会调用loadView方法来生成UIViewController.view

- (void)loadView

然后调用 viewDidLoad方法

- (void)viewDidLoad

如果loadView不能生成UIViewController.view系统将会反复调用loadView及viewDidLoad方法, 并且最终调用[super loadView] 方法返回UIViewController.view

然后依次调用如下2个方法, 这2个方法也十分重要, 在UINavigationController的POP操作后有时将要显示的UIViewController中的View并没有释放(也有可能释放掉) , UIViewController将不会调用上面的三个方法(initWithNibName,loadView,viewDidLoad) 而会调用下面这2个方法

- (void)viewWillAppear:(BOOL)animated;

- (void)viewDidAppear:(BOOL)animated;

在iOS5.0中还添加了2个函数:

- (void)viewWillLayoutSubviews ;

- (void)viewDidLayoutSubviews;

另外如果你这样写:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{

self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

if (self) {

UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];

self.view = view;

[view release];

// Custom initialization

NSLog(@”initWithNibName”);

}

return self;

}

那么loadView和viewDidLoad 方法将不会被调用

卸载过程

- (void)viewWillDisappear:(BOOL)animated;

- (void)viewDidDisappear:(BOOL)animated;

- (void)viewWillUnload;//iOS5.0添加

- (void)viewDidUnload;

- (void)dealloc;

PS: 当程序收到内存不足的警告后, 程序内存中的所有的UIViewController都将会收到didReceiveMemoryWarning调用消息. 目的是将当前不显示的UIViewController中的view释放掉(不会调用UIViewController的dealloc方法), 所以当该UIViewController再次显示的时候又要生成一次, 此时它会调用loadView-> viewDidLoad ->viewWillAppear等, 这时最容易造成内存泄漏!

- (void)didReceiveMemoryWarning;

- (void)viewWillUnload;//iOS5.0添加

- (void)viewDidUnload;

分享到:
评论

相关推荐

    UIViewController的加载方式和UIView的加载详解

    如果没有指定XIB文件,系统会按照默认的顺序尝试加载视图: - 先检查是否实现了loadView方法并使用返回的视图; - 然后根据是否从storyboard加载来加载视图; - 接着尝试根据XIB文件名加载视图; - 如果没有XIB文件...

    UIViewController里添加多个UIViewController

    UIViewController添加多个UIViewController。可以把UIViewController的View当作容器,让其他UIViewController添加进该View,并可以在多个UIViewController间切换。

    UIViewController生命周期详解

    1. **`loadView`**:该方法主要用于加载`UIViewController`的视图。如果`UIViewController`没有设置视图(即`self.view`为`nil`),那么系统会自动调用`loadView`方法。 2. **`viewDidLoad`**:在视图加载完成后会被...

    UIViewController Demo源代码

    - nib文件加载的`UIViewController`子类,检查`nibName`和`initWithNibName:bundle:`方法的使用。 - 不带nib的`UIViewController`子类,观察`loadView`方法的实现。 - 如何在应用启动时设置`rootViewController`...

    UIViewController新使用方法源码

    iOS 5引入了`popToViewController:animated:`方法,允许开发者直接跳转到堆栈中的某个特定`UIViewController`。此外,`popToRootViewControllerAnimated:`方法可以将当前控制器回退到根控制器。 3. **视图控制器间...

    UIViewController+Present.zip

    在iOS中,`UIViewController`提供了`present(_:animated:completion:)`方法来呈现一个新的控制器,而`dismiss(animated:completion:)`用于关闭模态。在iOS 13之前,模态弹出通常是全屏覆盖,但在iOS 13中,苹果引入...

    UIViewController+Swizzling 实现页面统计

    在页面统计场景下,我们通常关注的是`UIViewController`的生命周期方法,如`viewDidLoad`、`viewDidAppear:`等,因为这些方法对应着用户与页面的交互时刻。 要实现`UIViewController+Swizzling`,我们需要遵循以下...

    AICustomViewControllerTransition, 为iOS创建定制UIViewController转换的简单而简洁的方法.zip

    AICustomViewControllerTransition, 为iOS创建定制UIViewController转换的简单而简洁的方法 AICustomViewControllerTransition为iOS创建定制UIViewController转换的简单而简洁的方法没有限制,也没有实现...

    UIViewController+BackItem分类的实现

    在`hideBackBarButtonItemTitle`方法中,我们首先检查当前`UIViewController`的`leftBarButtonItem`和`backBarButtonItem`,找到返回按钮。然后,我们利用Objective-C的运行时API进行方法交换。我们创建了一个新的...

    ios-iOS 多个UIViewController之间滑动切换.zip

    在实际开发中,还需要考虑性能优化,如使用懒加载策略,只在需要时加载UIViewController的视图,以减少内存消耗。同时,手势冲突的处理也很重要,确保滑动切换手势不会与应用中的其他手势冲突。 总的来说,iOS应用...

    iOS5 UIViewController 新特性

    7. **Block-based APIs**:许多UIViewController的方法开始支持Block,如present(_:animated:completion:)和dismiss(animated:completion:),使得动画执行和完成后的行为更加易于控制。 8. **Lazy Loading**:虽然...

    UIViewController

    - `loadView`:当`view`属性为`nil`时,系统会调用此方法加载视图。一般情况下,我们不需要重写这个方法,除非有特殊需求。 - `viewDidLoad`:视图加载完成后调用,可以在这个方法中设置初始状态和配置视图。 - `...

    看懂App加载Class的顺序和Method的顺序.zip

    本资源"看懂App加载Class的顺序和Method的顺序.zip"似乎是一个开源项目,名为UIViewController-Swizzled-master,它可能是用来帮助开发者深入理解类加载机制并提供工具来跟踪和分析这个过程。 在Android系统中,类...

    iOS App开发中UIViewController类的使用教程

    在实际开发中,我们需要根据这些生命周期方法的调用顺序和目的,合理安排代码,确保视图的正确显示和管理。例如,你可以在`viewDidLoad`中设置初始状态,而在`viewWillAppear:`或`viewDidAppear:`中处理与显示相关的...

    一种创建自定义交互式UIViewController转换的简单方法.zip

    `EasyTransitions`是一个开源项目,它提供了一种简单的方法来创建自定义的、交互式的UIViewController转换。这个库的目标是帮助开发者轻松实现复杂而优雅的转场效果,而无需深入研究UIKit的底层细节。 `...

    UITableViewController的行为与UIViewController不同

    在`UIViewController`中,如果你使用`initWithNibName:bundle:`方法且不指定nibName(即nibName参数为nil),系统会尝试加载与类名相同的xib文件。但在`UITableViewController`中,如果nibName为nil,它不会自动加载...

    HRTPopViewController:UIViewController 的 Category 方法,以各种方式弹出 UIView

    UIViewController 的 Category 方法,以各种方式弹出 UIView ##使用方法 pod 'HRTPopViewController' #import "UIViewController+HRTPopViewController.h" [self showView: view withAnimation: ...

    ios UIView或者UIViewController缩放动画效果

    在iOS开发中,实现视图(UIView)或控制器(UIViewController)的缩放动画效果是常见的交互设计,可以增强用户体验并使界面更具动态美感。这里我们将深入探讨如何在iOS应用中创建这种效果,以及如何通过自定义Dome...

    深入讲解iOS开发中的UIViewController

    在iOS开发中,UIViewController是一个至关重要的组件,它是MVC(Model-View-Controller)设计模式中的控制器部分。...在实践中,不断探索和学习UIViewController的各种特性和方法,将有助于提升你的iOS开发技能。

Global site tag (gtag.js) - Google Analytics