
📖 资源简介
这套《慕课实战-新浪微博资深大牛全方位剖析 iOS 高级面试》的教程资源我整理出来了,分享给需要的朋友。
✨ 资源亮点
- 视频教学:16节视频演示,直观易懂,新手也能跟得上。
- 配套齐全:源码、课件、工具都打包好了(共2个压缩包),下载就能直接用。
- 模块丰富:涵盖129个学习模块,知识点覆盖全面。
📚 课程内容
课程大纲
- IOS面试课程资料(岗位要求、简历指南)
- z3799l(按章节组织的实战源码工程)
课程视频章节依次为:导学 → 岗位技能要求与简历 → UI 视图 → Objective-C 语言特性 → Runtime → 内存管理 → Block → 多线程 → RunLoop → 网络 → 设计模式 → 架构框架 → 算法 → 第三方库 → 课程总结。
资源清单
| 类型 | 数量 |
|---|---|
| 视频教程 | 16 节 |
| 压缩文件 | 2 个 |
| 其他文件 | 380 个 |
| 合计 | 398 |
🎯 高频面试考点精讲
这套课的作者来自新浪微博一线,内容最大的特点是”从面试题出发、用源码讲原理”。下面把课程覆盖的核心考点串一遍,便于你对照源码工程逐一击破。
一、Objective-C 语言特性
属性关键字是 OC 面试的第一道门槛,必须能讲清修饰语义与内存语义的区别:
| 关键字 | 语义 | 典型用途 |
|---|---|---|
assign |
setter 直接赋值,不改变引用计数 | 基本类型(NSInteger、CGFloat) |
weak |
弱引用,对象释放后自动置 nil,不保留 | delegate、避免循环引用 |
strong |
强引用,持有对象、使引用计数 +1 | 持有子对象 |
copy |
拷贝一份再持有,内容不可变 | NSString、Block、NSZone 等 |
nonatomic |
非原子操作,不加锁,性能高 | 几乎业务都用它(atomic 并不能真正保证线程安全) |
分类(Category)与关联对象:分类只能给类追加方法,不能追加成员变量;想在分类里”存”一个关联对象,就用 objc_setAssociatedObject / objc_getAssociatedObject:
static const char kNameKey;
- (void)setName:(NSString *)name {
objc_setAssociatedObject(self, &kNameKey, name, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
- (NSString *)name {
return objc_getAssociatedObject(self, &kNameKey);
}
Method Swizzling 要放在 +load 里并用 dispatch_once 保证只执行一次,否则重复交换会互相覆盖:
+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Class cls = [self class];
SEL ori = @selector(viewWillAppear:);
SEL swz = @selector(mc_viewWillAppear:);
Method m1 = class_getInstanceMethod(cls, ori);
Method m2 = class_getInstanceMethod(cls, swz);
method_exchangeImplementations(m1, m2);
});
}
二、Runtime:iOS 面试的”必答题”
Runtime 的核心是消息机制:[obj foo] 编译后变成 objc_msgSend(obj, @selector(foo))。流程大致为:isa 指针找类 → 查方法缓存 cache → 查方法列表 methodLists → 沿父类 superclass 链向上找;找不到则进入消息转发三步走:
- 动态方法解析
resolveInstanceMethod:,可用class_addMethod动态添加实现; - 快速转发
forwardingTargetForSelector:,把消息转给另一个备用对象; - 完整转发
methodSignatureForSelector:+forwardInvocation:,自定义 NSInvocation。
课程 chapter5 直接附带了 objc4-680 开源源码(objc-runtime.mm、objc-msgSend 相关文件),配合 RuntimeObject 工程动手验证,是理解 isa、cache、类元类关系的最佳材料。
三、内存管理
ARC 不是垃圾回收,编译器在合适位置插入 retain / release / autorelease。高频考点:
- 循环引用:delegate 用
weak、block 内用__weak typeof(self) weakSelf = self;打断环; - autoreleasepool:对象入池,在当前 runloop 迭代结束时统一释放;批量创建临时对象时手动包一层可及时降内存峰值;
- weak 实现:对象释放时,SideTable 维护的 weak 表会把所有指向它的 weak 指针自动置 nil,这也是”野指针”不会崩溃的原因;
- NSTimer 循环引用:课程 chapter6 的
NSTimer+WeakTimer就是经典解法——用一个中间代理对象弱引用 target,破除 timer 对 target 的强引用环。
四、Block 与多线程
Block 是 OC 闭包,本质是一个 __block_impl 结构体,会自动 copy 捕获的外部变量。Block 循环引用几乎必考:用 __weak 声明 self,必要时在 block 内再 __strong 临时持有。
多线程 GCD 是重头戏:
// 队列组:并发下载,全部完成后回主线程刷新 UI
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
[self downloadImageA];
});
dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
[self downloadImageB];
});
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"全部图片下载完成,刷新 UI");
});
信号量做线程同步 / 控制最大并发数,栅栏函数 dispatch_barrier_async 实现”多读单写”,这些课程 chapter8 的 Barrier、Group 目录都有对应工程。锁的选择按性能排序大致为:os_unfair_lock ≈ dispatch_semaphore > pthread_mutex > NSLock > @synchronized。注意死锁:同步队列里同步派发到自己一定死锁。
五、RunLoop
RunLoop 是”消息+事件”的循环,每个线程对应一个 RunLoop,主线程的默认启动。它按 Mode 运行(kCFRunLoopDefaultMode、UITrackingRunLoopMode 滚动时切换等),内部有 Source / Timer / Observer 三类输入源。面试常问:
- 为什么定时器滑动时不触发?因为 NSTimer 被加到 DefaultMode,UIScrollView 滚动时 Mode 切到 Tracking,Timer 就被挂起;解法是
UITrackingRunLoopMode或 commonModes 都加。 - 常驻线程怎么实现?给子线程 RunLoop 加一个 source 并
run,否则线程函数返回后 RunLoop 立刻销毁。
六、UIKit 事件与性能
事件传递考得极多:触摸事件从 hitTest:withEvent: 开始,由顶层视图递归往下”点中”那个最适合响应的视图,再沿响应者链向上冒泡:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
// 不交互、隐藏、透明度过低的视图直接不参与命中
if (!self.userInteractionEnabled || self.hidden || self.alpha <= 0.01) {
return nil;
}
UIView *view = [super hitTest:point withEvent:event];
return view; // 返回真正命中的子视图
}
性能优化方面:启动优化(+load、+initialize 耗时排查)、卡顿检测(CADisplayLink 监测掉帧)、内存泄漏(Instruments Leaks / MLeaksFinder)、离屏渲染(圆角+阴影+光栅化要克制)。
七、设计模式与架构
课程 chapter11 实现了适配器 Adapter、桥接 Bridge、命令 Command、责任链 Responder、单例等模式。面试常考架构分层:MVC 的 Massive 问题、MVVM 用 ViewModel 解耦视图与业务、VIPER 用于超大型团队;单例要注意线程安全的 dispatch_once 写法。
八、算法题速览
chapter13 给出了高频笔试题:链表反转、查找中位数、合并两个有序链表、字符翻转、两个节点的公共父节点。以链表反转为例:
// 迭代法反转单向链表
Node* reverseLinkedList(Node *head) {
Node *prev = nil, *cur = head;
while (cur) {
Node *next = cur->next; // 先存下一个
cur->next = prev; // 反转指针
prev = cur; // 整体后移
cur = next;
}
return prev; // 新头节点
}
九、网络与 HTTPS
课程第10章专门讲网络。NSURLSession 是现代网络栈的核心:dataTask(with:completionHandler:) 发请求,delegate 模式处理流式回调。高频考点是 HTTPS / TLS 与证书校验:
- HTTPS = HTTP + TLS,握手阶段协商对称密钥、服务器用证书证明身份;
- 证书校验要防中间人攻击,
URLSessionDelegate的urlSession:didReceiveChallenge:里实现NSURLAuthenticationMethodServerTrust,校验证书是否受信任、域名是否匹配; - 不要直接
return:NSURLSessionAuthChallengeUseCredential无条件放行,那等于关掉了证书校验。
Cookie 与缓存策略也是常考点:NSHTTPCookieStorage 管理 Cookie,request.cachePolicy 控制是否复用缓存。
十、Swift 基础要点
一线大厂现在新项目普遍用 Swift,面试也会问 OC 与 Swift 对比:
// 可选型:值可能为 nil,强制解包前必须判断
let name: String? = getName()
print(name ?? "默认值") // 空合运算符
name.map { print($0) } // 有值才执行
// struct 值类型 vs class 引用类型;enum 可带关联值
enum Direction {
case north, south
case custom(String)
}
// 协议与泛型、闭包
func difference<T: Numeric>(_ a: T, _ b: T) -> T { a - b }
let closure: (Int) -> Int = { $0 * 2 }
要点:Swift 的 struct / enum 是值类型且性能更好、protocol 面向协议编程、闭包注意 @escaping 与循环引用、weak self 同样必要。
架构分层:MVC 为什么会变 Massive
面试常被追问”你们项目用什么架构”。经典 MVC 里 Controller 既管视图又管业务,随着业务膨胀就成了 Massive View Controller。MVVM 的思路是抽出一个 ViewModel:它持有视图需要展示的数据与状态,把”业务逻辑”从 Controller 里搬走,Controller 只负责把 ViewModel 绑到视图上、转发用户操作。好处是可测试性提升(ViewModel 不依赖 UIKit,可单测)、Controller 变薄;代价是多了一层数据绑定,小项目会显得过度设计。VIPER 则把路由、交互、展示进一步拆成独立角色,适合超大型团队并行开发,但学习成本高。选型原则是”团队规模与项目复杂度匹配”,不是越分层越好。
面试复习路线建议
按课程章节顺序复习性价比最高:先过第2章简历与岗位要求,再按”UI → OC 语言 → Runtime → 内存 → Block → 多线程 → RunLoop → 网络 → 设计模式 → 架构 → 算法”的顺序,每章配合对应 chapter 源码工程动手跑一遍。Runtime 章节务必对照 objc4 源码读,把”结论”升级成”能讲清调用栈”,这是中级与高级的分水岭。
📁 目录结构
目录概览
- 📂 IOS面试课程资料(岗位要求与简历指南图片)
- 📂 z3799l(按章节组织的实战源码工程 + 视频)
📋 点击展开查看瘦身后的章节大纲
[V2]慕课实战-iOS 高级面试/
├── 📁 IOS面试课程资料/
│ └── 初/中/高/资深工程师岗位要求、简历写作指南(7 张图)
└── 📁 z3799l/
├── chapter3/ UI 事件:Event、IndexedBar(索引条 + 视图复用池 ViewReusePool)
├── chapter4/ OC 语言:KVO_TEST、MRCTest(手动引用计数)
├── chapter5/ Runtime:objc4-680 开源源码(runtime/、test/)
│ + RunTime、RuntimeTest 两个验证工程
├── chapter6/ 内存管理:Memory(NSTimer+WeakTimer 破解循环引用)
├── chapter7/ Block:Block 工程 + MCBlock 底层分析
├── chapter8/ 多线程:GCD(Group 队列组、Barrier 栅栏)
├── chapter9/ RunLoop:MC_RunLoop、RunLoop(含 Apple 源码)
├── chapter11/ 设计模式:Adapter / Bridge / Command / Responder / SingleInstance
├── chapter13/ 算法:链表反转、中位数、合并有序链表、字符翻转、公共父节点
└── 📄 15 节视频(导学、岗位简历、第3~15章各专题、课程总结)
资源获取
💡 建议:尽快保存到本地网盘或电脑,避免分享链接后期失效。
整理不易,如果对你有帮助,欢迎分享给更多需要的朋友。













请登录后查看评论内容