UI程序执行顺序(UIApplicationMain()函数),自定义视图

UI程序的一般执行顺序:

先进入main里面,执行函数UIApplicationMain(),通过该函数创建应用程序对象和指定其代理并实现监听,当执行函数UIApplicationMain()时还会做一次跳转,跳转至AppDelegate

UIApplicationMain() 函数的三大功能:

1.创建应用的UIApplication对象

2.指定应用程序的代理对象,代理的主要作用:监听应用程序是如何运行的.

3.建立事件循环(runloop:这个循环是一个死循环).作用:一旦用户操作应用程序,应用程序要立即做出响应,但用户操作应用的时间不确定,所以必须让代理一直处于监听状态,直到程序退出为止.

代码如下:

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

而AppDelegate其实也是一个代理,它遵循UIApplicationDelegate协议,这就是为何当一开始AppDelegate里会有很多方法的原因.(重写UIApplicationDelegate协议里面必须实现的方法)

下面简要介绍这些方法:

1.告诉代理程序即将启动完成,程序准备运行

代理实现这个方法的时候,第一步创建一个window对象,第二步给window配置属性,第三步将window设置为主屏幕并可见,如果window上有其他视图,通过window呈现即可

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
lf.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

2.告诉代理程序将要进入非活跃状态(暂停,将timer时间类停止)

- (void)applicationWillResignActive:(UIApplication *)application {
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.

}

3.告诉代理应用程序已经进入后台(存储有用数据,释放一些内存等)

- (void)applicationDidEnterBackground:(UIApplication *)application {
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}

4.告诉代理程序将要进入前台(取消暂停)

- (void)applicationWillEnterForeground:(UIApplication *)application {
    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}

5.告诉代理程序已经变得活跃(取消暂停状态的任务)

- (void)applicationDidBecomeActive:(UIApplication *)application {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}

6.

- (void)applicationWillTerminate:(UIApplication *)application {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}


当系统提供的视图不满足开发实际要求的时候,这个时候就需要开发人员自定义视图.

常见的自定义视图是UILabel和UITextFiled一起组合起来

下面就以最简单的UILabel和UITextFiled组合的自定义视图为例说明:

首先新建一个类LTVIew

在LTVIew.h文件中,首先定义俩个属性UILabel和UITextField.

LTVIew.h

@interface LTVIew : UIView
@property (nonatomic,retain)UILabel *label;
@property (nonatomic,retain)UITextField *textField;
@end

然后在LTVIew.h中重写initWithFrame:方法,实现对象一初始化就有UILabel和UITextField.

LTVIew.m

#import "LTVIew.h"

@implementation LTVIew
//重写UIView的方法
-(id)initWithFrame:(CGRect)frame{
    self=[super initWithFrame:frame];
    if (self) {
        [self p_setUp];
    }
    return self;
}
//写完这个方法,要立即在重写父类的初始化方法里调用
-(void)p_setUp{

    _label=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, self.frame.size.width/3, self.frame.size.height)];
    _label.backgroundColor=[UIColor yellowColor];
    [self addSubview:_label];
    [_label release];

    _textField=[[UITextField alloc]initWithFrame:CGRectMake(_label.frame.size.width, 0, self.frame.size.width*2/3, self.frame.size.height)];
    _textField.backgroundColor=[UIColor redColor];
    [self addSubview:_textField];
    [_textField release];

}
-(void)dealloc{
    [_textField release];
    [_label release];
    [super dealloc];
}
@end

然后就可以在AppDelegate.m文件中创建自定义对象并对其赋值属性使用额.

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-25 18:05:32

UI程序执行顺序(UIApplicationMain()函数),自定义视图的相关文章

Flex 程序执行顺序!

Flex 执行加载过程会有几个概念:preloader, SystemManager, Flex Application! flex 界面初始化时,看到的 Loading 加载条,那是 flex 自动执行的一个步骤,他是在 preloader 时进行的. 此时 preloader 执行是 systemManager 控制下的第一帧! 第二帧才是真正的主程序加载,也就 <s:Application 部分的加载... -----------------------------------------

深入理解Java程序执行顺序

下面将从一道阿里巴巴试题详细分析Java程序执行顺序. 阿里巴巴试题 public class Test { public static int k = 0; public static Test t1 = new Test("t1"); public static Test t2 = new Test("t2"); public static int i = print("i"); public static int n = 99; publi

iOS程序执行顺序 AppDelegate及 UIViewController 的生命周期

iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 iOS应用程序的状态切换很重要,而UIViewControler对于iOS这种MVC模式来说尤为重要,基本都要继承自他. 一.iOS程序的启动执行顺序 1 程序的入口 进入main函数, 设置AppDelegate称为函数的代理 2  程序完成加载 -[AppDelegate application:didFinishLaunchingWithOptions:] 3 创建window窗口 4 程序

iOS程序执行顺序和UIViewController 的生命周期(整理)

说明:此文是自己的总结笔记,主要参考: iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 UIView的生命周期 言叶之庭.jpeg 一. iOS程序的启动执行顺序 程序启动顺序图 iOS启动原理图.png 具体执行流程 程序入口进入main函数,设置AppDelegate称为函数的代理 程序完成加载[AppDelegate application:didFinishLaunchingWithOptions:] 创建window窗口 程序被激活[

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

当一个视图控制器被创建,并在屏幕上显示的时候. 代码的执行顺序1. alloc                                   创建对象,分配空间2.init (initWithNibName) 初始化对象,初始化数据3.loadView                          从nib载入视图 ,通常这一步不需要去干涉.除非你没有使用xib文件创建视图4.viewDidLoad                   载入完成,可以进行自定义数据以及动态创建其他控件5

java中子类继承父类程序执行顺序问题

Java中,new一个类的对象,类里面的静态代码块.非静态代码.无参构造方法.有参构造方法.类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证.比如新建一个测试父类. public class FatherTest { private String name; FatherTest(){ System.out.println("--父类的无参构造函数--"); } FatherTest(String name){ this.name=name; System.out

go程序执行顺序(转)

在一个 go 程序中通常包含:包.常量.变量.init().main()等元素,如果同时存在多个包,包之间存在依赖关系,每个包中存在多个 init 函数,每个文件中存在多个 init 函数,那么问题来了,他们之间的执行顺序是什么样的?通过本文我们来对它们之间的执行顺序做尽可能详尽的说明.如有不正之处,欢迎批评指正. 包的执行顺序 在 main 包中的 go 文件默认总是会被执行 同包下的不同 go 文件,按照文件名“从小到大”排序顺序执行 其他的包只有被 main 包 import 才会执行,按

JAVA程序执行顺序

先给结论: 执行顺序:父类静态块->子类静态块(main函数执行前)->父类块->父类构造器->子类块->子类构造器 赋值顺序:成员变量赋值->块赋值->构造器赋值 1 class A{ 2 static{System.out.println("Class A");} 3 {System.out.println("Class c");} 4 public A(){ 5 System.out.println("thi

MFC程序执行顺序

原文链接:http://www.cnblogs.com/lidabo/archive/2012/10/23/2735622.html 1.创建Application object对象theApp 程序一开始生产一个(且只有一个)Application object对象theApp,也即一个CWinApp对象,这个全局对象一产生,便执行其构造函数,因为并没有定义CMyWinApp构造函数,所以即执行CWinApp类的构造函数.该函数定义于APPCORE.CPP第75行,你可以自己搜出来啃一啃,因此