Skip to content

Latest commit

 

History

History
37 lines (24 loc) · 2.19 KB

Tip.README.md

File metadata and controls

37 lines (24 loc) · 2.19 KB

iOS 知识点

load和initialize的区别

  • +(void)initialize

  • 这个方法会在第一次初始化这个类之前被调用,我们用它来初始化静态变量。

  • initialize方法的调用时机,当向该类发送一个消息(一般是类消息首先调用,常见的是alloc)的时候,先调用类中的,在调用类别中的(类别中如果有重写);如果该类只是引用,没有调用,则不会执行initialize方法

  • 该方法类似一个懒加载,如果没有使用这个类,那么系统默认不会去调用这个方法,且默认只加载一次

  • initialize的调用在init方法之前

  • +(void)load

  • load方法会在加载类的时候就被调用,也就是iOS应用启动的时候,就会加载所有的类,就会调用每个类的 +(void)load方法

  • load方法的调用时机,main函数之前,先调用类中的,再调用类别中的(类别中如果有重写)

  • 总结

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

类方法与self的注意点

  • 注意点一:类方法

  • 类方法可以调用类型方法

  • 类方法不可以调用实例方法,但是类方法可以通过创建对象来访问实例方法

  • 类方法不可以使用实例变量。类方法可以使用self,因为self不是实例变量

  • 类方法作为消息,可以被发送到类或者对象里面去(实际上,就是可以通过类或者对象调用类方法)

  • 注意点二:self的规则

    • 实例方法里面的self,是对象的首地址
    • 类方法里面的self,是Class