load和initialize的不同

#import "Constants.h"  
@implementation Constants  

+ (void)initialize{  
    NSLog(@"init constants >>>>>>>>>>");  
}  

+ (void)load{  
    NSLog(@"load constants >>>>>>>>>>");  
}  

@end 

load,是加载类的时候,这里是Constants类,就会调用。也就是说,ios应用启动的时候,就会加载所有的类的+(void)load方法。

这样有个缺点,当加载类需要很昂贵的资源,或者比较耗时的时候,可能造成不良的用户体验,或者系统的抖动。这时候,就要考虑initialize方法了。这个方法可看作类加载的延时加载方法。类加载后并不执行该方法。只有当实例化该类的实例的时候,才会在第一个实例加载前执行该方法。

initialize 会在运行时仅被触发一次,如果没有向类发送消息的话,这个方法将不会被调用。这个方法的调用是线程安全的。父类会比子类先收到此消息。

在分类中实现load方法,不会覆盖该类的load的方法,它们都会执行,两者可以共存。但是,在分类中实现initialize会覆盖该类的initialize方法,两者不可共存。如果希望在类及其Categorgy中执行不同的初始化的话可以使用+(void)load;

子类中被实例化后,父类initialize方法首先被调用,然后调用子类的initialize方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值