iOS类对象的初始化+initialize

简介

在iOS中,对象可分为类对象和实例对象,实例对象即我们平时alloc init初始化的一个具体的对象,实例对象所属的类,称为类对象。类对象、实例对象

+initialize 是一个类方法,在iOS中NSObject以及子类的都有这个方法。

+ (void)initialize;

它是一个类方法,而且还是一个初始化方法。它是用来初始化类对象的方法。和初始化实例对象一样,是一个初始化方法:

我们可以在类里面复写此方法,但是一般我们不需要这么做,因为系统会自动帮我们初始化类对象,当该类收到第一个消息的时候。initialize

+ (void)initialize
{
    if (self == [super class]) {
        
        NSLog(@"%s",__func__);
    }
}

作用

initialize的存在是很有必要的。

一般的在iOS中我们调用某个类的实例方法,或者类方法,实现都会是以runtime消息转发的形式进行的。当一个类收到第一条消息的时候,会判断该类的类对象是否已经被初始化,如果否则会先执行+ (void)initialize这个初始化方法初始化一个该类的对象,即类对象。

类对象中保存中该类的成员成员变量、实例方法表等与该类相关的信息。这样我们在使用该类的实例对象的时候,就可以通过实例对象的isa指针找到对应的类对象,从而找到想要使用的方法或者成员变量等信息。这就是为什么要初始化类对象的目的,也就是+ (void)initialize方法存在的合理性所在。

initialize每个类仅被调用一次。

注意

initialize是线程安全的

运行时initialize以线程安全的方式将消息发送给类。也就是说,initialize由第一个线程运行以将消息发送给类,而其他任何尝试向该类发送消息的线程都将阻塞,直到initialize完成。

因为initialize是以阻塞的方式调用的,所以在这个方法中建议不要做太多其他处理,这也是我们平时不建议复写initialize的原因所在。

如果非要在initialize里做处理,建议在load方法中去处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Morris_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值