美文网首页
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