`
xyz_lmn
  • 浏览: 65363 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

iOS学习笔记(六)——ViewController

阅读更多
ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图。iOS的SDK中提供很多原生ViewController,以支持标准的用户界面,例如表视图控制器(UITableViewController)、导航控制器(UINavigationController)、标签栏控制器(UITabbarController)和iPad专有的UISplitViewController等。


按结构可以对iOS的所有ViewController分成两类:
1、主要用于展示内容的ViewController,这种ViewController主要用于为用户展示内容,并与用户交互,如UITableViewController,UIViewController。
2、用于控制和显示其他ViewController的ViewController。这种ViewController一般都是一个ViewController的容器。如UINavigationController,UITabbarController。它们都有一个属性:viewControllers。其中UINavigationController表示一种Stack式结构,push一个ViewController或pop一次,因此后一个ViewController一般会依赖前一个ViewController。而UITabbarController表示一个Array结构,各个ViewController是并列的。

ViewController使用

UIViewController可以使用两种方式创建,1、xib方式,2、代码方式

1)xib方式

Command+N 新建文件,选Cocoa Touch UIViewController subclass,SubClass of UIViewController,勾选with XIB for user interface。定义ViewController名字是MainViewController,最终生成MainViewController.h MainViewController.m MainViewController.xib三个文件。在AppDelegate.m文件的

didFinishLaunchingWithOptions方法中加载xib文件。


    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    
    MainUIViewController *vc=[[MainUIViewController alloc]initWithNibName:@"MainUIViewController" bundle:nil];
    self.window.rootViewController=vc;
    
    [self.window makeKeyAndVisible];
    return YES;

加载xib文件后,在xib文件拖拽几个控件可看到效果。


2)代码创建

Command+N 新建文件UIViewController文件,在AppDelegate.m文件的didFinishLaunchingWithOptions方法中使用。在UIViewController的loadView方法中使用代码创建view。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    
//    MainUIViewController *vc=[[MainUIViewController alloc]initWithNibName:@"MainUIViewController" bundle:nil];
//    self.window.rootViewController=vc;
    
    RootViewController *rc=[[RootViewController alloc] init];
    self.window.rootViewController=rc;
    
    [self.window makeKeyAndVisible];
    return YES;
}

创建View

- (void)loadView{
    [super loadView];
    
    UIView *view=[[UIView alloc]initWithFrame:[UIScreen mainScreen].applicationFrame];
    view.alpha=0.5;
    view.backgroundColor=[UIColor cyanColor];
    self.view=view;

}


ViewController的生命周期

前面写了iOS应用程序的生命周期,这里会写到ViewController的生命周期,这个更像Android的Activity的生命周期(见文章最后的图)。ViewController生命周期会经历初始化、加载视图、销毁视图、生命结束等过程。

1)init方法

初始化ViewController本身。

2)loadView方法

当view需要被展示而它却是nil时,viewController会调用该方法。

如果代码维护View的话需要重写此方法,使用xib维护View的话不用重写。

3)viewDidLoad方法

执行完loadView后继续执行viewDidLoad,loadView时还没有view,而viewDidLoad时view已经创建好了。

4)viewDidUnload方法

当系统内存吃紧的时候会调用该方法,内存吃紧时,在iPhone OS 3.0之前didReceiveMemoryWarning是释放无用内存的唯一方式,但是OS 3.0及以后viewDidUnload方法是更好的方式。

在该方法中将所有IBOutlet(无论是property还是实例变量)置为nil(系统release view时已经将其release掉了)。

在该方法中释放其他与view有关的对象、其他在运行时创建(但非系统必须)的对象、在viewDidLoad中被创建的对象、缓存数据等。

一般认为viewDidUnload是viewDidLoad的镜像,因为当view被重新请求时,viewDidLoad还会重新被执行。

5)dealloc

释放其他资源或内存。


viewController的生命周期图

ViewController加载view过程,见下图(loadView)

1)loadView


ViewController卸载View过程见(unLoadView)

2)unLoadView



/**
* @author 张兴业
* http://blog.csdn.net/xyz_lmn
* iOS入门群:83702688
* android开发进阶群:241395671
* 我的新浪微博:@张兴业TBOW
*/


参考:

https://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007457-CH1-SW1

http://xcodev.com/341.html

http://iostrack.com/post/2012-07-20/40029700941



Activity生命周期


分享到:
评论

相关推荐

    iOS之presentViewController模态全屏适配解决方案.docx

    iOS之presentViewController模态全屏适配解决方案 .isPresentViewController模态全屏适配是iOS开发中的一项重要技术问题。从iOS 13.0开始,默认的模态显示视图从全屏变成了Sheet卡片样式的非全屏模式。这使得许多...

    iOS实例开发源码——jacksinn-simon-442e226.zip

    总的来说,"iOS实例开发源码——jacksinn-simon-442e226.zip"为我们提供了一个宝贵的iOS开发学习资源,涵盖了从基础语法到高级技术的诸多方面,是iOS开发者成长道路上的重要参考资料。通过深入研究这个项目,无论是...

    iOS实例开发源码——dompepin-GameJam2012-ca7194d.zip

    综上所述,通过研究《iOS实例开发源码——dompepin-GameJam2012-ca7194d.zip》,开发者不仅可以学习到iOS游戏开发的基础知识,还可以了解到如何在紧张的时间限制下创新和优化游戏。对于希望提升iOS游戏开发技能的...

    iOS实例开发源码——manucorporat-CCNotifications-887289f.zip

    《iOS实例开发源码——manucorporat-CCNotifications》 该压缩包“manucorporat-CCNotifications-887289f.zip”包含了iOS应用开发中的一个实例项目,由开发者manucorporat创建。这个项目的核心是实现通知...

    iOS实例开发源码——drewish-Pipes-f5826b2.zip

    《iOS实例开发源码——drewish-Pipes-f5826b2.zip》 这个压缩包中的内容属于iOS应用开发领域,特别是针对一个名为“Pipes”的项目。"drewish"可能是开发者或者项目的别名,而"f5826b2"则可能是一个特定的版本标识,...

    iOS实例开发源码——jstart-Bear-Beware-86484e7.zip

    《iOS实例开发源码——jstart-Bear-Beware-86484e7》 在iOS应用开发中,源码分析是提升技术能力的重要途径。这个名为"jstart-Bear-Beware-86484e7"的项目源码提供了一个实际的iOS实例,我们可以从中学习到许多关键...

    iOS实例开发源码——mbarber-BoardGameTimer-356e0d1.zip

    《iOS实例开发源码——mbarber-BoardGameTimer》 该压缩包“mbarber-BoardGameTimer-356e0d1.zip”包含了iOS应用开发的一个实例项目,项目名为“BoardGameTimer”,由开发者mbarber创建。这个项目主要是一个用于...

    iOS实例开发源码——itarato-HexGuess-8a281fb.zip

    在本项目"iOS实例开发源码——itarato-HexGuess-8a281fb.zip"中,我们探讨的是一个基于iOS平台的游戏应用——HexGuess的源代码实现。这个项目由itarato创建并分享,其Git版本号为8a281fb。HexGuess是一款逻辑与策略...

    iOS实例开发源码——jtdreisb-SpaceShip-38ec407.zip

    《iOS实例开发源码——jtdreisb-SpaceShip-38ec407》 这个压缩包文件“jtdreisb-SpaceShip-38ec407.zip”是一个专门针对iOS平台的实例开发项目,由开发者jtdreisb创建并分享。项目名称“SpaceShip”暗示它可能是一...

    iOS实例开发源码——hugoram-MegaBato-e4f1c05.zip

    【iOS实例开发源码——hugoram-MegaBato-e4f1c05.zip】是一个包含iOS应用程序开发源代码的压缩包。这个项目可能是由开发者hugoram创建的,版本标识为e4f1c05,这通常对应于Git仓库中的一个特定提交。在iOS开发中,源...

    iOS实例开发源码——jojo312-NumbersTo1-7d30242.zip

    这个压缩包文件“iOS实例开发源码——jojo312-NumbersTo1-7d30242.zip”显然包含了一个iOS应用的源代码,由开发者jojo312创建,版本号可能是7d30242。这个应用可能是一个简单的教育或练习项目,目标是展示如何在iOS...

    iOS实例开发源码——ebabchick-RAMI-9641b4f.zip

    在本压缩包“iOS实例开发源码——ebabchick-RAMI-9641b4f.zip”中,我们找到了一个iOS应用的源代码,它可能是开发者在学习或实践iOS开发过程中的一个项目实例。从文件名推测,ebabchick可能是应用的名称,而RAMI可能...

    iOS实例开发源码——jsz-Mega-Fill-Up-cfde55c.zip

    《iOS实例开发源码——jsz-Mega-Fill-Up-cfde55c》 这个压缩包中的内容,"jsz-Mega-Fill-Up-cfde55c",很可能是某个iOS应用的源代码仓库,它为我们提供了一个深入学习iOS开发的实际案例。通过分析和研究这个项目,...

    iOS实例开发源码——lukecampbell-CocoaSquare-8efd83b.zip

    《iOS实例开发源码——lukecampbell-CocoaSquare-8efd83b》 这个压缩包中的内容属于iOS应用开发领域,源自开发者lukecampbell的一个项目CocoaSquare。项目版本号为8efd83b,这通常代表了代码库在特定时间点的一个...

    iOS实例开发源码——jodonnell-Touchaga-4aaa598.zip

    《iOS实例开发源码——jodonnell-Touchaga-4aaa598》 这个压缩包文件"jodonnell-Touchaga-4aaa598.zip"包含了一个名为"jodonnell-Touchaga-4aaa598"的iOS应用开发项目。这个项目可能是一个实际的iOS应用实例,由...

    iOS实例开发源码——hoffrocket-MathKen-db55f4c.zip

    【iOS实例开发源码——hoffrocket-MathKen-db55f4c.zip】是一个与iOS应用开发相关的项目源代码包,主要围绕MathKen这个应用程序展开。MathKen可能是一款以数学运算为主题的教育或游戏应用,旨在提升用户的数学技能。...

    IOS实现在两个ViewController间传值(一)

    在iOS开发中,数据在不同ViewController间的传递是一个常见的需求,特别是在构建复杂的用户界面时。本文将详细介绍如何在两个ViewController之间实现数据的传递,主要聚焦于基本的Objective-C编程环境,适用于初学者...

    iOS实例开发源码——gaudiramone-Navidad2-08aeddc.zip

    《iOS实例开发源码——gaudiramone-Navidad2-08aeddc》 这个压缩包中的内容是关于iOS应用开发的一个实例项目,名为"Navidad2",由开发者gaudiramone创建并维护。从项目名可以推测,这可能是一个与圣诞节相关的应用...

    iOS实例开发源码——jshmrsn-Above---Beyond-Air-Combat-416b529.zip

    这个压缩包文件“iOS实例开发源码——jshmrsn-Above---Beyond-Air-Combat-416b529.zip”显然包含了名为“jshmrsn-Above---Beyond-Air-Combat-416b529”的iOS应用程序的源代码。这可能是一个飞行战斗模拟游戏,名为...

    iOS实例开发源码——lim6112j-DoodleFalling-ae6412a.zip

    这个压缩包"iOS实例开发源码——lim6112j-DoodleFalling-ae6412a.zip"显然包含了一个iOS应用的源代码,名为"DoodleFalling"。这个项目可能是由开发者lim6112j创建的,并且在版本控制中处于ae6412a的状态。...

Global site tag (gtag.js) - Google Analytics