initialize和load方法的使用和比较
2016-09-20 14:13
253 查看
在oc中,绝大多数类都继承于NSObject根类,在该类中有两个方法被用来执行初始化操作,即NSObject类的load方法和initialize方法。
1.load方法
原型如下:
当应用程序启动的时候,就会掉用各个类的该方法。而且当类(class)和分类(category)中都定义了load方法时,先调用类的再调用分类的。执行子类的load方法前,会先执行所有super类的load方法,而如果在类的load方法中还依赖了其他的程序库或者其他类,那程序库及其相关类的load方法都会被调用。
而因为load方法的调用时机时程序刚启动的时候,谁也不能保证在load方法中使用的其它类就已经被加载好了,也许其使用的另一个类需要进行一些特定的操作才能正常使用,这时候程序就会出现问题。
除此之外,load方法还有一个比较不一样的地方,就是load方法并不尊从继承规则。如果某个类没有实现load方法,那么不管其各级父类是否实现了该方法,系统都不会调用。
load方法会阻塞程序直到完成所有类的load方法调用,程序加载时间就会被延长影响用户体验,所以一般只应该用来调适程序,比如在分类中实现load方法来判断分类是否被正确加载,其它情况应该尽量避免。
2.initialize
方法原型:
initialize不同于load方法的是,initialize方法使用的是懒加载方法,即使用到该类的时候才会进行调用,也就是说如果程序中并没有使用到某个类那这个类的initialize方法永远不会被调用。initialize方法遵循系统的继承规则,当子类没有覆写该方法时,系统会自动调用父类的。在该方法中其实也应该尽量简化代码,避免在类中调用其它方法或者使用其它类,原因同load方法类似,可能会引入“依赖环”。
initialize方法尽量用来初始化该类的内部变量,比如设置初始化全局变量。
1.load方法
原型如下:
+(vid)load;
当应用程序启动的时候,就会掉用各个类的该方法。而且当类(class)和分类(category)中都定义了load方法时,先调用类的再调用分类的。执行子类的load方法前,会先执行所有super类的load方法,而如果在类的load方法中还依赖了其他的程序库或者其他类,那程序库及其相关类的load方法都会被调用。
而因为load方法的调用时机时程序刚启动的时候,谁也不能保证在load方法中使用的其它类就已经被加载好了,也许其使用的另一个类需要进行一些特定的操作才能正常使用,这时候程序就会出现问题。
除此之外,load方法还有一个比较不一样的地方,就是load方法并不尊从继承规则。如果某个类没有实现load方法,那么不管其各级父类是否实现了该方法,系统都不会调用。
load方法会阻塞程序直到完成所有类的load方法调用,程序加载时间就会被延长影响用户体验,所以一般只应该用来调适程序,比如在分类中实现load方法来判断分类是否被正确加载,其它情况应该尽量避免。
2.initialize
方法原型:
+(vid)initialize;
initialize不同于load方法的是,initialize方法使用的是懒加载方法,即使用到该类的时候才会进行调用,也就是说如果程序中并没有使用到某个类那这个类的initialize方法永远不会被调用。initialize方法遵循系统的继承规则,当子类没有覆写该方法时,系统会自动调用父类的。在该方法中其实也应该尽量简化代码,避免在类中调用其它方法或者使用其它类,原因同load方法类似,可能会引入“依赖环”。
initialize方法尽量用来初始化该类的内部变量,比如设置初始化全局变量。
相关文章推荐
- iOS中load 与 initialize 静态方法的区别使用
- iOS 比较load和initialize方法
- hibernate中使用load方法,could not initialize proxy - no Session
- initialize和init以及load方法的区别与使用以及什么时候调用
- 129. NSObject的load和initialize方法比较
- NSObject的 load和initialize方法的比较
- 使用Hibernate.initialize(Object obj)方法初始化一个代理对象或者集合
- SQL中条件和比较关键字Case的使用方法(case的结果就是得到了一个值)
- 在使用Linq的过程中,如果要进行数据的比较和处理,请记住使用ToList()方法。
- 使用JS判断是否数字和小数点组合的数字的两中方法比较-isNaN和逐判断
- 使用JS判断是否数字和小数点组合的数字的两中方法比较-isNaN和逐判断[转载]
- 如何使用QImage的load方法和qrc文件
- loadbundle - jsf标签 f:loadbundle 的使用方法
- 卡巴斯基几种比较实用的使用方法
- JSF中f:loadBundle标签的使用方法(转)
- 关于Hibernate的merge() attachDirty() attachClean()三种方法比较使用
- SQL中条件和比较关键字Case的使用方法(case的结果就是得到了一个值)
- 使用方法参数与对象属性之间的比较
- GrLoadImageFromBuffer和GrDrawImageFromBuffer的使用方法
- 比较application,session,cookies,viewstate四个对象区别?(从原理,使用范围, 存取方法等方面来讨论)