initialize 与 load的区别

有时候,类必须执行某些初始化操作才能正常使用。OC中的大部分类都继承自NSObject,它提供了两个可以执行初始化操作的方法。

  • (void)load;
    被加入运行期系统(iOS一般是应用启动时)的类和分类都会调用这个方法,只调用一次。先调用类里的,再调用分类的。按照分类引入的顺序,调用分类的load方法。

在load方法中调用别的类是不安全的!因为不知道它们调用的顺序,比如代码中还依赖别的库,别的库的相关类的load方法也会执行,会出现交叉的情况。

注意:load方法不遵从继承。即:类中没实现load方法,不管超类是否实现load方法,都不会去执行。能精简尽量精简。

  • (void)initialize;
    首次用类的时候会调用这个类,只调用一次,惰性调用。它是由运行时系统来调用的,不能直接调用。

initialize方法是在线程安全的环境下调用,可以操作类或类的实例

initialize方法遵循继承规则,如果类中没实现它,会去调用超类中的实现。

方法里的代码要精简,设置一些状态,是类能正常进行即可,不要执行一些耗时或者需要加锁的任务。

initialize方法只应该用来设置内部数据。不应该在其中调用别的方法,即使是自己的方法也不该调用。例如:某个全局状态在编译器没办法编译期初始化,就可以放在这里。
比如:单例类在首次调用之前,必须执行某些操作,就可以使用initialize方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容