App入门与UIKit简介(上)| 青训营笔记

228 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的的第10天

App入门与UIKit简介(上)| 青训营笔记

App入门

main函数

// main.m
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}
  1. App的入口,在main函数中将App的控制权交给UIKit框架
  2. UIApplicationMain创建核心对象
    1. 初始化一个UIApplication对象
    2. 初始化一个AppDelegate代理对象

UIApplication

  1. 单例模式,一个App中只有一个UIApplication对象
  2. 启动 Main RunLoop
  3. 创建事件队列:将用户产生的事件放入队列中依次处理
  4. 维护UIWindow列表(类似前端中通过DOM):获取所有视图
  5. 包含实现了UIApplicationDelegate协议的对象:处理App生命周期和系统事件

image (11).png

AppDelegate

  1. 单例模式,一个App中只有一个AppDelegate对象
  2. 响应来自应用程序外部的通知:内存不足警告、下载完成通知等
  3. 响应针对应用程序本身的事件:不是用户事件

生命周期

App生命周期

  1. App生命周期:5种状态 download_image.png 2,App生命周期钩子
  • application:willFinishLaunchingWithOptions: 在App启动时调用表示应用加载进程已经开始,常用来处理应用状态的存储和恢复
  • application:didFinishLaunchingWithOptions: 表示App将从未运行状态进入运行状态,用于对App的初始化操作
  • applicationDidBecomeActive: 当应用即将进入前台运行时调用
  • applicationWillResignActive: 当应用即将进从前台退出时调用
  • applicationDidEnterBackground: 当应用开始在后台运行的时候调用
  • applicationWillEnterForeground: 当程序从后台将要重新回到前台(但是还没变成Active状态)时候调用
  • applicationWillTerminate: 当前应用即将被终止,在终止前调用的函数。通常是用来保存数据和一些退出前的清理工作。如果应用当前处在suspended,此方法不会被调用。 该方法最长运行时限为5秒,过期应用即被kill掉并且移除内存。

ViewController简介&生命周期

两种viewController

  1. contentViewController:在自己的view中,包含多个view,每个view负责页面的不同部分,在VC向view注入数据/从view中收集数据
    1. UIViewController
  2. containerViewController:在自己的view中,包含多个view controller,但每次仅展示一个或多个,提供方法用于在不同页面间切换
    1. UINavigationController
  3. 每个window只有一个根VC

VC主要生命周期

  1. Load阶段:只执行一次
    1. viewDidLoad:
      1. 将子view加入VC的view中
      2. 整个页面的VC,可以在此处埋点,pageID
      3. 不要将每次进入页面时都要重新执行的代码(如动画、数据加载)放在这个部分
  2. View即将呈现在屏幕上
    1. viewWillAppear:在这里更新view的内容,避免内容改变后需要重新layout
    2. viewWillLayoutSubviews
    3. viewDidLayoutSubviews

其他列举

  • alloc:创建对象,分配空间
  • init:初始化对象,初始化数据
  • awakeFromNib:所有视图的outlet和action已经连接,但还没有被确定。
  • loadView:完成一些关键view的初始化工作,加载view。
  • viewDidLoad:载入完成,可以进行自定义数据以及动态创建其他控
  • viewWillAppear:视图将出现在屏幕之前
  • viewWillLayoutSubviews:将要对子视图进行调整
  • viewDidLayoutSubviews:对子视图进行调整完毕
  • viewDidAppear:视图已在屏幕上渲染完成
  • viewWillDisappear:视图将被从屏幕上移除
  • viewDidDisappear:视图已经被从屏幕上移除
  • dealloc:视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释
  • didReceiveMemoryWarning:内存警告

View更新UI

  1. 异步刷新:如果强制刷新布局,请调用 setNeedsLayout
    1. 可以将多个布局更新放到一个更新周期中,用来优化性能。
  2. 同步刷新:如果想马上刷新界面,请调用layoutIfNeeded
  3. 以上两种方法,都会调用layoutSubviews来进行重新布局,只有在自动布局和约束,不能满足需求时,才重写layoutSubviews

UIKit简介:

视图:UIView vs. CALayer

  1. CALayer:
    1. 不处理用户交互事件
    2. 负责管理图层位置、动画效果和变换等
      1. 最常用:制作阴影、圆角、带颜色边框
  2. UIView:
    1. 封装了CALayer
    2. 所有视图都继承自UIView
    3. U可以处理用户交互事件

未完待续