LESSON 18 / 576 分钟

UIKit:View 与 ViewController

UIKit 是成熟的命令式 UI 框架,适合读懂既有工程、使用成熟组件与精细控制界面。

用你的前端经验理解

操作 UIView 有一点像命令式更新 DOM;UIViewController 同时承担界面生命周期和协调工作,不能简单等同一个 React 组件。

为什么需要它

UIKit 采用以对象为中心的界面体系:UIView 负责显示和交互区域,UIViewController 组织一个界面单元及其生命周期。与 SwiftUI 的声明式描述不同,你常常持有控件实例,在数据变化时修改属性。理解这些基础有助于接入既有组件、排查系统视图层级,以及阅读老项目。

它是怎样工作的

viewDidLoad 通常适合一次性的视图配置,出现与消失回调适合处理可见期间的行为,但出现回调可能多次触发。控制器可以拥有子控制器,正确嵌入需要建立生命周期与父子关系,不能只把 child.view 放进层级就认为完成。数据层最好仍独立于控制器,防止所有网络、解析和布局堆在一个文件里。

把关键概念连起来

1

视图

UIView 负责展示和交互,UILabel、UIButton 等组成视图树;通常在主线程操作 UI。

2

控制器

UIViewController 管理一个界面,viewDidLoad 适合视图加载后的初始化,viewWillAppear 等对应出现过程。

3

协作

target-action、delegate、data source 把交互、事件和数据提供分开。SwiftUI 的声明式写法隐藏了部分这类协调。旧项目还会出现 Storyboard / XIB、IBOutlet / IBAction,以及 Objective-C 的 .h / .m 文件;先读懂接口,再按需要了解互操作。

构建文章详情控制器

  1. 创建标题 UILabel 和收藏 UIButton,配置样式并添加布局约束,避免每次出现都重复添加一套控件。
  2. 把文章模型交给控制器,由一个 render 方法更新标题与按钮状态,建立可追踪的刷新入口。
  3. 页面离开后取消只服务当前页面的工作,检查异步回调是否仍强引用整个控制器。

这里需要你亲自判断

不要把网络、存储和全部业务逻辑都堆进一个 ViewController。

做一个小练习

阅读一个 UIKit 控制器,找到视图创建、事件处理和数据加载分别在哪里。

  1. 在加载、出现和消失位置记录安全日志,导航往返两次观察调用次数。
  2. 说明数据请求为何不能未经判断地在每次出现时重复追加列表。
展开参考思路与验收标准

初始化和可见性不是同一个生命周期事件。重复出现可以刷新,但刷新策略需要幂等并有意设计;不能依靠“应该只执行一次”的假设。

UIViewController 最接近什么职责?

继续查阅官方资料
Apple Developer 官方资料

本课聚焦核心认知。具体 API、系统要求与发布政策,以当前官方文档和工程验证为准。

答对理解题后即可标记完成