美文网首页
load和initialize

load和initialize

作者: 没能唱给你的歌曲 | 来源:发表于2016-08-31 11:49 被阅读39次

load

  • load方法只会调用一次,只要引入头文件就会调用#import
  • 如果一个类调用了load方法,会自动调用其父类的load方法,不用再load方法中不需手动实现,是自动调用父类的load方法
  • 如果没有实现load方法,那么不会调用父类的load方法
  • load方法是线程安全的,不要做耗时操作,会阻塞线程
  • 在load方法中可以runtime进行方法交换
+ (void)load {
Method current = class_getInstanceMethod([self class], @selector(originalFunc));
Method change = class_getInstanceMethod([self class], @selector(swizzledFunc));

method_exchangeImplementations(current, change);

}

Snip20160831_1.png

initialize

  • initialize方法在第一次创建时调用,跟load一样只调用一次

  • 如果子类没有使用initialize方法,一样会调用父类的initialize方法

  • 使用的时候,为了保证initialize只调用一次,应该做一个判断,为当前类时调用,不然什么都不做

      + (void)initialize {
      if (self == [CurrntObject class]) {
       }
      }
    

总结

  • 都不能手动调用load和initialize
  • load用来进行基于运行时的方法交换,initialize用来初始化静态变量或者全局变量
  • 都是线程安全的,不要进行耗时操作和一些可能阻塞线程的操作

相关文章

网友评论

      本文标题:load和initialize

      本文链接:https://www.haomeiwen.com/subject/oyvqettx.html