iOS load 和 initialize 认识
【摘要】 loadload 会在类或分类被添加到 runtime 时调用。并且只会被 runtime 调用一次。如果子类没有实现,父类的 load 方法也不会被再次调用。load 的调用顺序链接的 framework自己的 imageC++ 静态初始化方法,具有 __attribute__(constructor) 修饰的函数链接到你的 image其它:父类优先子类类优先分类( category )i...
load
load
会在类或分类被添加到 runtime
时调用。并且只会被 runtime
调用一次。
如果子类没有实现,父类的 load
方法也不会被再次调用。
load 的调用顺序
链接的
framework
自己的
image
C++
静态初始化方法,具有__attribute__(constructor)
修饰的函数链接到你的
image
其它:
父类优先子类
类优先分类(
category
)
initialize
initialize
会在类被使用前调用。包括类方法。
比如下面的代码。在 load
内调用 [self class]
会导致 initialize
被调用。
+ (void)load{ NSLog(@"%@ %s", [self class], __FUNCTION__);}+ (void)initialize{ NSLog(@"%@ %s", [self class], __FUNCTION__);}
每个类都会被 runtime
线程安全的调用一次 initialize
方法。
父类会在子类前被调用。
如果子类没有实现或者调用 [super initialize]
,则父类会被再次调用。
下面的代码可以保证只执行一次初始化操作:
+ (void)initialize { if (self == [ClassName self]) { // ... do the initialization ... }}
参考资料
1、Objective-C +load vs +initialize
2、NSObject +load and +initialize - What do they do?
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)