>02 (协议代理)、自定义视图、程序执行顺序(iOS程序启动流程 )、视图控制器、(MVC的理解)

本文深入讲解了iOS开发中的关键概念和技术,包括协议代理机制、自定义视图的封装思想及懒加载实现方式,详解了iOS程序启动流程,并探讨了视图控制器的生命周期及其重要功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

02 (协议代理)、自定义视图、程序执行顺序(iOS程序启动流程 )、视图控制器、(MVC的理解)

1.协议代理

这里需谨记它循环引用的实际例子。

2.自定义视图、懒加载

自定义视图LTView步骤 封装思想
根据需求的不同, 自定义视图继承的类也有所不同。一 般自定义的视图会继承于UIView。以下是LTView的要点:
1、创建一个UIView 类
2、在类的初始化方法中添加子视图
3、类的.h 件提供 一些接口 (方法),便于外界操作子视图。

假设我们使用 LTView类代表label-textfield视图。
我们创建 一个LTView类继承于UIView。
我们将LTView作为一个容器,在LTView的初始化方法中创建并添加label和textField。
此时的LTView就变成了一个具有label和textField的视图了。

注意:

1.往往我们需要对LTView中的Label或者Textfield进一定的控制, 如:设置Label的text,获取Textfield的text,给Textfield指定delegate,设置textColor等。
2.为了方便外界操作Label和Textfield,因此我们要为外界提供一些方法。

懒加载

本质原理就是重写属性的get方法,好处就是当我们需要用到的时候在初始化它,起到一个延时的加载作用


- (UILabel *)descLable{
    // 当属性每次调用get方法的时候,首先判断该对象是否存在,如果存在直接返回,如果不存在直接创建
    if (!_descLable) {
        _descLable = [[UILabel alloc] initWithFrame:CGRectMake(100, 10, 80, 30)];
        [self addSubview:_descLable];
    }
    return _descLable;
}

3.iOS程序启动流程

注意

其中包括main函数,整个应用的代理 AppDelegate.熟悉AppDelegate里面的代理方法

//  5、程序加载完成之后,就会执行该代理方法,在该方法中我们为应用程序创建window等必要的界面
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    NSLog(@"---%s",__func__);// 打印方法名
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    [self.window setRootViewController:[[UIViewController alloc] init]];// 视图控制器

    //创建一个视图控制器对象
    RootViewController *rootVC = [[RootViewController alloc] init];
    //将创建好的视图控制器设置为window的根视图控制器
    [self.window setRootViewController: rootVC];

    return YES;
}

//  6、程序即将结束活跃状态(例如:来电,突然来短信,就会执行该方法)。一般在该方法中做一些必要信息的存储,和一些暂停动作。(例如,游戏正在进行时,要暂停游戏。)
- (void)applicationWillResignActive:(UIApplication *)application {
    NSLog(@"---%s", __func__);//
}

//  7、程序已经进入后台,如果程序长期在后台待着,有可能退出。所以,在改进方法中要进行一些重要数据的持久化。
    // 一般在该方法中保存应用程序的数据, 以及状态
- (void)applicationDidEnterBackground:(UIApplication *)application {
    NSLog(@"---%s", __func__);
}

//  8、程序即将进入前台,一般是在程序由后台进入的时候会执行该方法。
- (void)applicationWillEnterForeground:(UIApplication *)application {
    NSLog(@"---%s", __func__);

}

//  9、程序已经变得活跃(程序启动或者由后台进入前台都会执行该方法)。
- (void)applicationDidBecomeActive:(UIApplication *)application {
        NSLog(@"---%s", __func__);
}

//  10、应用程序即将退出终止的时候会调用该方法
- (void)applicationWillTerminate:(UIApplication *)application {
    NSLog(@"--%s", __func__);
}

注意:

模拟window类中的setRootViewController的set方法(笔试)

     - (void)setRootViewController:(UIViewController *)rootViewController{

          if (_rootViewController != rootViewController) {
                   [_rootViewController release];
               }
                _rootViewController = [rootViewController retain];

        }
     [self addSubView:_rootViewController.view];//此时这个self是window!!!

     系统内部已经帮我们实现~~~~~

5.视图控制器

重点

熟悉视图控制器的生命周期,注意点为,viewDidLoad只会执行一次!

//1).创建一个视图控制器的时候,系统会帮我们创建一个自带的和屏幕等宽高的视图(view)作为视图控制器的属性。
/*加载视图控制器自带的视图
  当使用到该视图控制器自带的view的时候(调用view属性的get方法的时候),才会调用loadView方法创建的该view*/
- (void)loadView{//重写Controller的loadView系统方法

    NSLog(@"--%s", __func__);

/*  如果我们使用自定义的视图,那么就不要调用父类的view [super loadView]  */
}

//2).视图加载完毕
- (void)viewDidLoad {
    [super viewDidLoad];

    [self.view addSubview:[self creatLabel]];//

    NSLog(@"--%s", __func__);

}
//3).视图即将出现
- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    NSLog(@"--%s", __func__);
}
//4).视图已经出现
- (void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    NSLog(@"--%s", __func__);
}
//5).试图即将消失
- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    NSLog(@"--%s", __func__);
}
//6).视图已经消失
- (void)viewDidDisappear:(BOOL)animated{
    [super viewDidDisappear:animated];
    NSLog(@"--%s", __func__);
}
//7).被释放掉了
- (void)dealloc{
    //arc下dealloc方法可以被重写,但是不能在内部使用[super dealloc];
//    [super dealloc];
}

功能
1.控制视图显示 ,响应事件。
2.分担AppDelegate的工作。实现模块独立 ,提高复用性。
3.控制视图大小变换、布局视图、响应事件。
4.检测以及处理内存警告。
5.检测以及处理屏幕旋转。
6.检测视图的切换。

使用方法
1.定义UIViewController的子类
2.创建视图控制器对象,作为window的根视图控制器
3.在viewDidLoad中使用默认创建好的视图对象view


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值