加载过程:
一般情况下调用 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;
相关推荐
1. **`loadView`**:该方法主要用于加载`UIViewController`的视图。如果`UIViewController`没有设置视图(即`self.view`为`nil`),那么系统会自动调用`loadView`方法。 2. **`viewDidLoad`**:在视图加载完成后会被...
在上述代码中,我们重写了这些初始化方法来打印日志,以便观察各个方法的执行顺序。`awakeFromNib`方法在从XIB或Storyboard加载视图时被调用,而`layoutSubviews`则在视图需要布局时自动调用,例如在屏幕旋转或者父...
在这个项目中,我们可能会看到一个自定义的UIViewController子类,它重写了`viewDidLoad`、`viewWillAppear`或`viewDidAppear`等生命周期方法,以便在视图加载或显示时执行特定的动画代码。 在iOS开发中,实现动态...
- **概述**:控制器(如UIViewController)的生命周期是指控制器从创建到销毁的整个过程中的各个阶段。 - **关键方法**: - `init`: 初始化方法。 - `viewDidLoad`: 视图加载完成后的回调。 - `viewWillAppear:` ...
2. **ViewController管理**: JFATabBarController会管理各个对应的UIViewController实例,确保在正确的时间加载和显示内容。 3. **动画逻辑**: 库内部包含了处理滑动动画的代码,可以自定义动画效果以匹配应用的整体...
开发者需要掌握如何创建自定义视图,设置其frame以决定在屏幕上的位置和大小,以及如何添加子视图和调整他们的层级顺序。 在层级管理中,`Auto Layout`和`Size Classes`是非常关键的概念,它们帮助开发者在不同屏幕...
静态图片引导通常是一组精心设计的图片,顺序展示在启动过程中;而动态交互引导则通过动画或简单的触摸交互来引导用户。 在iOS中,我们可以使用以下几种技术来实现引导界面: 1. **Storyboard或Xib文件**:这是最...
例如,通过在`UIViewController`的`load`方法中交换`viewDidAppear`和`viewDidDisappear`方法,可以自动记录页面的进入和退出。 在数据字段设计上,包括了: - PAGE_ID:当前页面的唯一标识,通常与类名关联并通过...
- **加载视图控制器数组**:使用数组来管理多个视图控制器的导航顺序。 **3.8 选项卡栏** 选项卡栏提供了一种让用户在多个视图之间切换的方式。 **3.9 小结** 本章重点介绍了视图控制器的管理和导航机制,包括...