前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >系统框架--51:精简initialize与load的实现

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

作者头像
xy_ss
发布2023-11-22 08:33:32
860
发布2023-11-22 08:33:32
举报
文章被收录于专栏:浮躁的喧嚣

类的初始化

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

代码语言:javascript
复制
 +(void)load
 +(void)initialize 

+(void)load

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

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

代码语言:javascript
复制
#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方法都应该实现得精简一些,这有助于保持应用程序的响应能力,也能减少引入的几率
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 类的初始化
  • +(void)load
  • +(void)initialize
  • load与initialize的区别与相同点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档