能力缺口:你写 Objective-C 是在背语法,还是在管内存

很多从其他语言转岗到苹果生态的开发者,或者只碰过 Swift 的新手,写 Objective-C 时经常卡在同一个地方:语法看着像 C 加了点动态特性,能跑通基础逻辑,但一碰到回调嵌套、对象生命周期或多模块协作,代码就开始崩或者漏内存。这门课解决的就是这个断层。它不教你怎么写 if else,也不重复第一季的基础语法,而是直接逼你面对 Objective-C 最核心的运行机制:类别怎么扩展已有类、协议怎么定义契约、块怎么捕获变量、引用计数到底在底层怎么走。如果你写 Objective-C 时对 MRC 时代毫无概念,或者以为 ARC 能帮你搞定一切,那这块就是你的硬缺口,别假装自己懂内存。

怎么看怎么练:先抓机制,别急着敲代码

这门课适合已经掌握 Objective-C 基础语法、能写简单类和方法的开发者。建议先看类别与扩展这两节,理解 Objective-C 如何在不修改源码的情况下给类加方法,这是苹果框架里大量使用的设计模式。接着直接跳到块这一章,重点看块对变量的捕获规则,特别是基本类型和对象类型的差异,这块不练透,后面写异步回调全是坑。内存管理是整门课的重头,建议从头看到尾,尤其是 MRC 那几节,别跳。哪怕你日常用 ARC,也得手动写过 dealloc、调过 retain 和 release,才能理解 ARC 在编译期帮你插了什么代码。资料包里的代码片段不要直接复制运行,自己照着敲一遍,然后手动改成 MRC 版本,对比引用计数的变化。

学完能独立做什么:从能写到写得对

看完这套内容,你应该能独立完成几件事:给系统的 NSString 或 UIView 写一个类别扩展,加自定义方法而不继承;定义一套协议,让不同类遵从并实现,然后把协议作为方法参数类型传递,实现多态调用;写一个带回调的块方法,清楚知道里面捕获的变量什么时候释放、什么时候需要用 weak 避免循环引用;在 MRC 环境下手动管理一段代码的内存,重写 dealloc 释放资源,并能解释每一行为什么这么写。最后回答几个问题自测:协议和类别在运行时有什么本质区别?块捕获对象变量时,引用计数发生了什么变化?ARC 下为什么还需要写 dealloc?如果这几个问题答不上来,说明内存和块那两章还得回去再看。

课程目录

1-1 [类别与扩展] 5.1类别 (18:33)
1-2 [类别与扩展] 5.2扩展 (07:58)
2-1 [协议] 6.1协议概念 (05:53)
2-2 [协议] 6.2协议声明 (06:03)
2-3 [协议] 6.3遵从协议 (05:20)
2-4 [协议] 6.4协议作为数据类型 (08:32)
3-1 [块] 7.1块概念 (14:53)
3-2 [块] 7.2块与变量捕获 (09:08)
4-1 [内存管理] 8.1内存管理方式 (06:37)
4-2 [内存管理] 8.2引用计数 (04:02)
4-3 [内存管理] 8.3内存管理规则 (09:55)
4-4 [内存管理] 8.4.1重返MRC时代内存管理 (05:43)
4-5 [内存管理] 8.4.2重写dealloc方法 (05:17)
4-6 [内存管理] 8.4.3示例:查看引用计数 (05:02)
4-7 [内存管理] 8.4.4自动释放池 (15:44)
4-8 [内存管理] 8.4.5对象所用权 (02:31)
4-9 [内存管理] 8.4.6MRC相关属性内存管理参数 (02:34)
4-10 [内存管理] 8.5ARC内存管理 (04:20)
4-11 [内存管理] 8.6强引用循环 (11:49)
4-12 [内存管理] 8.7@class指令 (02:57)
4-13 [内存管理] 8.8弱引用打破强引用循环 (02:24)
5-1 [Objective-C编码规范] 9.1命名规范 (06:05)
5-2 [Objective-C编码规范] 9.2注释和声明 (05:46)
5-3 [Objective-C编码规范] 9.3代码排版 (10:29)