load 和 initialize 方法的区别;

本文对比了Objective-C中的load与initialize方法的特点及用途。load方法在main函数前被调用,无论子类是否实现都会执行,并用于方法交换等操作。initialize则在类的第一个方法被调用前执行,实现懒加载且确保只调用一次。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相同点:都是可以自动被调用的,无需手动调用;并且它们的方法实现内部都是有锁的,是线程安全的

不同点:
(1)子类不实现load方法,父类的load方法就不会被调用,子类不实现init方法,父类也会调用init方法;
(2)load在main函数之前被调用,不是懒加载实现的;init是懒加载,只被执行一次
(3)load是只要类所在文件被引用就会被调用,而initialize是在类或者其子类的第一个方法被调用前调用。所以如果类没有被引用进项目,就不会有load调用;但即使类文件被引用进来,但是没有使用,那么initialize也不会被调用。
load详解:
在调用load方法之前
(1)会调用load_images用来扫描镜像中所有带+load符号的方法,将这些类加入到loadable_classes列表中,父类在前,子类在后,分类在loadable_category中
(2)先从loadable_classes中调用call_class_loads;然后loadable_category中call_category_loads
(3)使用场景:交换方法

initialize详解
在该类第一次调用方法时被调用,在alloc之前,alloc导致了initialize的执行,真正调用initialize方法的是c函数_class_initialize,强制父类先发送

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值