内存泄漏
- 微信读书 的 MLeaksFinder
- MrPeak's PLeakSniffer
网络检测
- NSUrlProtocol
卡顿检测
- RunLoop
- 子线程ping主线程
Mach-o格式
header
- magic(魔数):判断32位或64位
- CPU类型:(ARM)
- CPU具体类型:arm64 , armv7
- 文件的类型
- load commands加载指令条数
- load commands 加载指令大小
- flags
- 保留位
Load Commands
- load commands 是一张包括区域的位置、符号表、动态符号表等内容的表。它详细保存着加载指令的内容,告诉链接器如何去加载这个 Mach-O 文件。通过查看内存地址发现,在内存中 load commands 是紧跟在 header 之后的
data段
_TEXT
主程序代码、动态链接、方法名称、类名称、方法类型、静态字符串常量
_DATA
非懒加载符号表、懒加载符号表、方法名称
设计模式
创建型模式
- 抽象工厂模式 - 类簇
- 工厂模式
不同的数据最后产出不同的模型(但是是一个实例),对应同一个cell(不同布局)
- 建造者模式
超过四个属性用一个config
- 原型模式
深拷贝
- 单例模式
结构型模式
- 适配器模式 (协议)
- 桥接模式
不同的car,跑在不同的路(road)上,主要的关键点是抽象中包含具体的实例,就类似于road类内有car的实例
- 装饰者模式
动态地向对象添加行为(behaviors)和职责(responsibilities)而无需修改其代码。它是子类化的替代方法,通过用另一个对象包装它来修改类的行为。(分类) - 外观模式
暴露统一的接口 - 代理模式
为其他对象提供一种代理以控制对这个对象的访问
行为型模式
- 职责链模式(响应链)
- 解释器模式
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
import Foundation
class Explain: NSObject {
func add(a: Double, b: Double) -> Double {
return a + b
}
func multiply(a: Double, b: Double) -> Double {
return a * b
}
}
- 迭代器模式 - 循环
- 中介者模式 - 中间件
- 备忘录模式 - 归档、序列化
- 观察者模式 (通知、KVO)