美文网首页
系统框架--51:精简initialize与load的实现

系统框架--51:精简initialize与load的实现

作者: 皆为序幕_ | 来源:发表于2018-08-12 17:55 被阅读0次

    类的初始化

    类必须先执行某些初始化操作,然后才能正常使用。OC中,绝大多数类都继承NSObject根类,该类有俩个方法用来实现初始化操作

     +(void)load
     +(void)initialize 
    

    +(void)load

    • 对于加入运行期系统的每个类及分类来说,必定会调用此方法,而且仅此一次
    • 若类本身或分类都定义load方法,则先调用类里的,在调用分类的
    • 在执行load方法之前,必定先执行所有超类的load方法,如果代码还依赖了其他程序库,那么库里相关类的load方法也必定会执行

    注:对于某个程序库,无法判断其中各个类加载的顺序,因此在load类加载其他类是不安全的

    #import "Person.h"
    #import "Student.h"
    @implementation Person
    + (void)load{
        Student *stu = [[Student alloc]init];
    }
    @end
    //无法判断Student这个类是否已经加载完毕,只有Student加载完毕之后,在可以使用,所以,在load类加载其他类是不安全的
    
    • load方法不遵从继承规则,如果某个类本身没有实现load方法,那么不管各级超类是否实现load方法,系统都不会调用
    • load方法务必实现得精简尽量少执行操作

    +(void)initialize

    • 对于每个类来说,initialize方法会在程序首次用该类之前调用,且只调用一次
    • initialize方法遵从继承规则,如果某个类没有实现它,而其超类实现了,那么就会运行其超类的实现代码
    • initialize方法务必实现得精简尽量少执行操作
    • initialize方法只应该用来设置内部数据,不应该调用其他方法

    load与initialize的区别与相同点

    • load方法会把应用程序所有类load都执行完,才能继续其他逻辑;initialize是用哪个类执行哪个类,且为懒加载
    • initialize方法在运行期由系统调用,是处于正常状态的,线程也是安全的,而运行期执行load方法时不安全的
    • load与initialize方法都应该实现得精简一些,这有助于保持应用程序的响应能力,也能减少引入的几率

    相关文章

      网友评论

          本文标题:系统框架--51:精简initialize与load的实现

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