理解view的生命周期:
在UIViewController中,view(黑体的view指的是controller的view属性)有两个循环:加载和卸载循环。当程序的一部分向controller请求view的指针且view不在内存中时,view会进入加载循环,controller会将view加载入内存。
当程序接收到内存警告时,controller会尝试卸载view,在卸载循环中,controller尝试释放它的view对象并返回到原始的无view状态(当它不在屏幕上显示时,这个条件的判断到底是根据view的结构来还是根据用户视觉来,我尚不清楚),直到view下次被请求。
在加载卸载循环中,controller处理的大部分逻辑。但是如果我们的controller还“持有”着view的后代view时,或者还有其他后续操作需要进行时,我们可以重载特定函数(后面会介绍到)来另行处理。
加载循环:
程序请求了controller的view.
如果view当前不在内存中,controller调用loadview函数。
loadView 进行如下操作:
如果你重载了这个函数,你应该自己创建必要的views并且将一个非nil值赋给view属性
如果你没有重载这个函数,默认实现会使用controller的nibName 和 nibBundle属性来尝试从nib文件加载view。如果没有找到nib文件,它尝试寻找一个与view controller类名匹配(viewControllerClassName.nib)的nib文件。
如果没有可用的nib文件,那么它创建一个空的UIView作为它的view。
controller 调用 viewDidLoad 方法来执行一些加载时(加载时一词,相对于编译时、运行时)任务.
程序可以重载loadView 和 viewDidLoad来执行一些任务:
卸载循环:
程序收到内存警告.
每个view controller调用 didReceiveMemoryWarning:
If you override this method, you should use it to release any custom data that your view controller object no longer needs. You should not use it to release your view controller’s view. You must call super at some point in your implementation to perform the default behavior.(iOS3.0以后不建议重载这个函数来进行额外的清除操作,使用viewDidUnload)
默认实现会在确定可以安全地释放view时释放掉view。
如果controller释放了它的view, 它会调用 viewDidUnload. .可以重载这个函数来进行额外的清理操作(不要清除view和那些加载循环中无法rebuild的数据)。
原文地址:
http://www.cnblogs.com/Piosa/archive/2012/02/22/2363258.html
分享到:
相关推荐
在`UIViewController`的生命周期中,一切始于初始化阶段。当一个`UIViewController`被创建时,通常会通过以下两种方式: 1. **`init`方法**:这是最常见的初始化方式,例如`init()`或`init(nibName:nibNameOrNil ...
在这篇教程中,我们将深入探讨这两个类的生命周期,以及如何在实际开发中运用。 首先,我们来看UIView的生命周期。一个UIView实例可以通过三种方式创建:`init`,`initWithFrame:`和`initWithCoder:`。在上述代码中...
在实际开发中,我们需要根据这些生命周期方法的调用顺序和目的,合理安排代码,确保视图的正确显示和管理。例如,你可以在`viewDidLoad`中设置初始状态,而在`viewWillAppear:`或`viewDidAppear:`中处理与显示相关的...
通过学习这个`UIViewController Demo`源代码,开发者可以更好地理解`UIViewController`的生命周期、视图加载机制以及如何在不同情况下创建和使用视图控制器。同时,掌握这两种创建方式有助于提高代码的灵活性和可...
4. **Child View Controllers**:在iOS5中,UIViewController支持添加子控制器(Child View Controller)。这种功能允许开发者将复杂的界面拆分成多个小的、独立的控制器,每个子控制器管理一部分视图。通过...
首先,我们需要了解UIViewController的生命周期和过渡动画的基础知识。UIViewController提供了`present`和`dismiss`方法来显示和隐藏其他视图控制器,而这些操作默认伴随着系统提供的过渡动画。但为了实现个性化的...
`viewDidLoad`只是生命周期中的一个阶段,你还可以在其他方法中,如`viewWillAppear:`、`viewDidAppear:`、`viewWillDisappear:`和`viewDidDisappear:`等,根据需求进行额外的视图配置和逻辑处理。 总之,通过编程...
2. **生命周期方法**: - `loadView`:当`view`属性为`nil`时,系统会调用此方法加载视图。一般情况下,我们不需要重写这个方法,除非有特殊需求。 - `viewDidLoad`:视图加载完成后调用,可以在这个方法中设置...
在iOS开发中,UIViewController是一个至关重要的组件,它是MVC(Model-View-Controller)设计模式中的控制器部分。在iOS应用的界面构建中,UIViewController扮演着协调者和管理者角色,负责组织和控制应用的用户界面...
- **生命周期方法**:在StaticViewController中,可能需要重写`viewDidLoad`、`viewWillAppear`等生命周期方法来执行初始化操作。 通过以上方法,你可以在iOS应用中灵活地调用和展示静态ControllerView。不过,如果...
通过研究源码,开发者可以深入了解如何在实际项目中应用Apple的UIKit框架,尤其是关于UIView和UIViewController的生命周期、动画API以及手势识别等方面的知识。 【压缩包子文件的文件名称列表】仅有一个:View...
1. **UIViewController的生命周期**:在实现图片转换时,了解ViewController的生命周期至关重要。这包括`viewDidLoad`、`viewWillAppear`、`viewDidAppear`等方法,它们在视图控制器的不同阶段被调用,可用于设置...
4. **生命周期方法的增强** iOS 5新增了`willAnimateRotationToInterfaceOrientation:duration:`和`didRotateFromInterfaceOrientation:`方法,帮助开发者在界面旋转过程中处理动画。不过,这些方法在iOS 6后被`...
这种方式允许我们在一个父控制器中管理多个子控制器的生命周期,而无需手动处理每个子控制器的加载、显示和释放,大大简化了代码结构。 接下来,我们将`UISegmentedControl`与`ChildViewController`结合使用: 1. ...
UIViewController负责管理视图的生命周期,而UIView则负责显示内容和响应用户的交互。了解UIViewController的加载方式以及UIView的加载机制对于开发一个功能强大且高效的应用程序至关重要。 ### UIViewController的...
在iOS应用开发中,视图控制器(UIViewController)是构建用户界面的核心组件,它负责管理一个或多个视图的生命周期和行为。本项目“iOS应用源码之视图控制器(动画版)”着重展示了如何在UIViewController中实现动画...
animated)}支持以下生命周期事件: UIViewController生命周期挂钩: viewDidLoad viewWillAppear viewDidAppear viewWillDisappear viewDidDisappear UIView生命周期挂钩: didMoveToWindow 注意:操作是在对象自己...
在iOS开发中,数据在不同View之间传递是一个...在实际应用中,选择哪种方式取决于具体需求,如视图间的关联性、数据的重要性以及数据的生命周期。理解并熟练运用这些方法,将有助于你更好地管理iOS应用中的数据流动。