APM

内存泄漏

  • 微信读书 的 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

非懒加载符号表、懒加载符号表、方法名称

_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)

推荐阅读更多精彩内容