作者:厄祖EQ | 来源:互联网 | 2023-08-12 16:31
针对常见的面试问题,有些文章写得很不错,记录下来,经常看看。
多线程
- 这是最重要的一块,也是相对比较难的一块。从实际使用来看,NSOperation是最重要的,其次GCD也是要掌握的;另外两种pThread和NSThread知道就好。
- 队列分串行并行两种;
执行分同步异步两种;
- 死锁的情况,一种是相互等待,比如相互依赖,NSOperation可能会出现这种情况;另外一种是主线程自己等自己;
- GCD栅栏,dispatch_barrier_async,可以保证前后两部分的时序,要充分运用。
- 单例dispatch_once
- 延时执行dispatch_after
- dispatch_group_t可以起到Promise.all()的作用,可以切换到主线程
- NSOperation用maxCOncurrentOperationCount=1实现串行队列
- NSOperation可以暂停和取消
- NSOperation的操作依赖可以实现串行顺序
- 一个线程对应一个RunLoop对象
- 定时器是否工作跟RunLoop对象的模式有关
- 用RunLoop实现常驻内存线程
- 用图片默认模式延迟显示,防止图片卡顿
- 实现线程安全的数组,是多线程运用的一个典型案例
iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用
iOS多线程:『GCD』详尽总结
iOS多线程:『RunLoop』详尽总结
关于NSMutableArray线程安全的思考和实现
iOS实录12:NSMutableArray使用中忽视的问题
IOS多线程同步问题
iOS多线程到底不安全在哪里?
内存管理
-
从MRC到ARC,到block,到引用循环,到属性修饰关键字等等,内存管理一直是比较重要的话题。下面这篇文章的总结很好,很有用:
iOS经典面试题总结–内存管理
-
平时怎么使用XCode查内存相关的问题?参考下面这篇文章
WWDC 2018:iOS 内存深入研究
-
了解关于UIImage方面的知识:
WWDC2018 图像最佳实践
WWDC心得与延伸:iOS图形性能
-
关注内存是为了关注性能,怎样进行性能调优:
iOS 性能调优,成为一名合格iOS程序员必须掌握的技能
iOS 性能优化总结
iOS 性能优化探索
iOS的离屏渲染
-
如果内存处理不当,会引起崩溃,因而了解一下崩溃也是有好处的:
WWDC 2018:理解崩溃以及崩溃日志
主题: 如何捕捉发布版本ipa的崩溃, 并定位崩溃代码
iOS崩溃crash大解析
Runtime
RuntimeSummary
UIScrollView
首页轮播广告,就是常见的一种应用。
UITableView
UITableView在iOS中已经成了一种现象级的内容,需要重点关注。
- 表格的高度计算是非常影响性能的一个方面,目前有一个star很高的第三方库:
优化UITableViewCell高度计算的那些事
UICollectionView
实现垂直方向的单列表来说,使用UITableView足以;若是需要构建横向滑动列表、gridView等直线型布局,则使用UICollectionView+UICollectionViewFlowLayout搭建最合适;更复杂的布局,则可以使用UICollectionView+自定义Layout来实现。
组件化
架构
- 这篇文章讲了基本概念,也有实例代码:
杂谈: MVC/MVP/MVVM
- 这里讲UIViewController是场景Scene,不是真正的C层。可以根据业务,提供合适的xxxHelper作为真正的C,实现真正的MVC。
- MVP也是可以考虑的一种方式,UIViewController当做场景Scene,引入一个额外的P起到C的作用,隔离V和M,叫做MVCP比较合适。
- MVVM可以看作增强版的MVP。VM起到了P的作用,隔离了V和M。并且在VM和V之间引入了双向绑定,自动更新V,减少了代码。至于双向绑定采用KVO还是RAC,可以根据实际情况选择。
- 这几篇文章讲了基本概念,示意图很清晰,并且还进行了前后端框架应用的对比:
谈谈 MVX 中的 Model
谈谈 MVX 中的 View
谈谈 MVX 中的 Controller
浅谈 MVC、MVP 和 MVVM 架构模式
- 将业务逻辑移到Model(参考redux的state),自定义视图替代根视图,给Controller减负
- 增加P对象,解耦M和V
- 不建议用独立对象做为UITableView的代理
从目前阅读这三篇文章之后看,可以考虑引入ViewModel,作用相当于Presenter,隔离View和Model。RAC改变太多,代码很陌生,暂时不引入。可以考虑用KVOController 作为属性观察,让View响应ViewModel的变化。Swift就不需要了,有原生支持的属性观察方法。
UML
在Java中用得比较多,Objective-C中不是很常见。其中的类图还是要了解一下,能看懂比较有利于沟通。
六种关系是理解的基础,两两对应起来,方便记忆
泛化,实现;
依赖,关联;
聚合,组合;
UML的六种关系
UML元素和UML关系图符号简介
软件设计之UML—UML中的六大关系