load和initialize

最近找工作中被问到这个问题,整个人就闷了,这是什么鬼……

  • 根据这篇博文整理下笔记[细说OC中的load和initialize方法(http://www.jianshu.com/p/d25f691f0b07)
  • load
  1. load 方法在这个文件被程序装载的时候调用。
  2. 每调用load方法就会先调用它的父类load方法

如果没有调用该load方法,则不会调用父类的load方法

  1. load方法总是在mian函数之前调用

除了Method Swizzle ,别的逻辑都不应该放到load方法中

  • initialize

第一次给某个类发送消息的时候会被调用(同时会调用父类的initialize方法),并且只会调用一次

  • 总结
  1. load和initialize方法都会在实例化对象之前调用,以main函数为分水岭,前者在main函数之前调用,后者在之后调用。这两个方法会被自动调用,不能手动调用它们。
  2. load和initialize方法都不用显示的调用父类的方法而是自动调用,即使子类没有initialize方法也会调用父类的方法,而load方法则不会调用父类。
  3. load方法通常用来进行Method Swizzle,initialize方法一般用于初始化全局变量或静态变量。
  4. load和initialize方法内部使用了锁,因此它们是线程安全的。实现时要尽可能保持简单,避免阻塞线程,不要再使用锁。

你可能感兴趣的:(load和initialize)