Skip to main content

ObjC 之 技术路线图

·339 words·2 mins· 📖

本文可以作为面试八股的准备指南

很早之前看过一个 前端 Roadmap,图做的非常漂亮。最近发现有人做了类似的 移动端 Roadmap

其中 iOS 是这样的:

还有 Swift 的,暂时先不关注了。这里综合一下形成文字版,方面查缺补漏。

iOS 的体系结构如下图:

Ref: iOS abstraction layers

需要重点关注的有下面几个方面:

Foundation #

ARC/MRC 与 内存管理 #

ARC is supported in Xcode 4.2 for OS X v10.6 and v10.7 (64-bit applications) and for iOS 4 and iOS 5.

现在除了一些老项目,基本没有 MRC 为主的代码了,所以只需要简单了解下 MRC 与 ARC 的区别即可

  1. MRC 需要手动写 dealloc,并且一定要最后再调用父类的 dealloc; ARC 一般不需要写 dealloc,也不需要调用 [super dealloc]。移除 NSNotification Observer 和 KVC Observer 例外。

  2. 在 ARC 的工程中使用 MRC,需要在工程中设置源文件的编译选项 -fno-objc-arc

  • Tagged Pointer

  • OC 对象与 CF 对象转换

    • __bridge, __bridge_retained, __bridge_transfer

AutoReleasePool #

  • AutoReleasePool 的数据结构

  • AutoReleasePool 与 @autoreleasepool

Block 🔥 #

  • __weak 与 __block

  • block 的结构体类型

  • block 如何捕获外部变量

  • 循环引用 与 Weak-Strong Dance

Category 🔥 #

  • load 加载时机

  • load 与 initialze

  • 方法加载时机

  • 如何添加属性 - 关联对象

  • category 与 class-extension

  • category 覆盖原类方法的原理

  • category 同名方法调用顺序

HotPatch #

  • JSPatch 的原理

KVC 与 KVO #

  • KVC 是如何实现的

  • KVO 的原理

  • 如何对 NSMutableArray 进行 KVO

    • mutableArrayValueForKey
  • KVC 与 KVO 有什么联系与区别

MultiThread 多线程 🔥 #

  • 哪些多线程方法

  • GCD 与 NSThread, NSOperationQueue

  • 互斥锁与自旋锁

Network 🔥 #

NSTimer 🔥 #

  • timer 与 Runloop

  • timer 导致循环引用的产生与解决

Property 🔥 #

  • 不指定任何关键字时,默认的类型:

    • OC 对象:atomic, readwrite, strong
    • 数值对象:atomic, readwrite, assign
  • 不同属性的区别

  1. atomic/nonatomic
  2. readonly/readwrite
  3. (retain, MRC)/assign/weak/strong/unsafe_unretained/copy
  • copy 与 assign

  • weak 与 copy

  • weak 与 __unsafe_unretained

  • atomic 并不是线程安全的

  • 如何实现一个弱引用容器

    • + [NSPointerArray weakObjectsPointerArray] 弱引用数组
    • + [NSMapTable weakToWeakObjectsMapTable] 弱引用表
    • + [NSHashTable weakObjectsHashTable] 弱引用 hash 表
    • + [NSValue valueWithNonretainedObject:] 弱引用对象

Runloop 🔥 #

  • Runloop 与线程的关系

  • mode

  • source0 & source1

  • 如何实现一个常驻线程

  • 用 runloop 监听主线程卡顿

Runtime 🔥 #

系列文章: Runtime 是个啥?

其他知识 #

  • NSNotification 原理

  • id 与 instancetype

  • nil, Nil, NULL, NSNull

  • NSPredicate 谓词

  • APNS (Apple Push Notification Service) 原理

UIKit #

UIView 与 CALayer #

  • bounds 与 frame

  • setNeedsDisplay 与 layoutIfNeeded

常用 UI 组件 #

  • UIScrollView

  • UITableView

    • cell 复用原理
  • UICollectionView

AutoLayout #

  • Masonary 原理

  • VFL 语法

  • 约束 Constraints

UIResponder #

  • touch events

  • hitTest / pointsInside

  • 事件传递与响应链

离屏渲染 #

  • layoutSubview 与 drawRect

性能优化 #

  • 图片渲染过程

  • 卡顿优化

Core 系列 #

Core Graphics #

  • 高效绘制圆角

Core Data #

AVFoundation #

架构能力 #

设计模式 #

架构模式 #

  • MVC

  • MVP

  • MVVM

响应式编程 #

重构与解耦 #

组件化 #


更多面试题:

  1. https://github.com/LGBamboo/iOS-Advanced
  2. https://www.jianshu.com/p/e709fde38de3
  3. https://www.jianshu.com/p/d9a39ab1d526