Objective- c浅谈对象的初始化

这篇博客主要讨论Objective-C中对象的初始化,强调在init方法中调用[super init]的重要性,解释了self和super的使用区别,并提供了自定义初始化方法的例子。内容涵盖面向对象编程的基础,适合iOS开发者学习。

Objective- c 对象的初始化

从今天开始正式驻扎在这里了,随后的日子小博主会分享一些与ios开发相关的知识和一些个人的经验,同时也虚心接受大牛们的各种板砖。今天主要是关于Objective - c 对象的初始化问题。OC是一门面向对象的语言,你在定义了一个类的时候,总要提供一些初始化方法,比如:

- (id)init
{
    self = [super init];
    if (self)
    {
        // code
    }
    return self
}

在init方法中,若要父类完成所需的一次性初始化,那么我们需要调用[super init],init方法它的返回值是一个id类型,它描述的是被初始化的对象;你在这里可能会不明白,为什么我们要将[super init]的结果返回给self。这样做是出于安全考虑,为了防止父类在初始化的过程中返回的对象不同于原先创建的对象的现象。

这里需要说明一下:在ios中,你所创建的类都是继承于NSObject这个基类,它的init方法就是return self,当父类的初始化完成,即它的self不为nil的时候,那么子类的初始化工作就可以开始了。当然,当你的类没有init方法的时候,那么当你初始化时候会自动调用父类的init,所以你在你定义的类中使用了init作为方法名的时候,你只是重写了NSObject这个父类的方法。所以你完全可以自己定义一个初始化的方法出来,给个小例子:比如我们定义了一个classA类,在这个类中有俩个属性分别是name和number,然而需要对name 或者 number进行初始化方法,那么我们可以这样做:

- (id) init
{
    self = [super init];
    if (self)
    {
    }
    return self;
}

- (id)initWithName:(NSString *)string
{
    if ([self init])
    {
        self.name = string;
    }
    return self;
}

- (id)initWithNumber:(NSString *)string
{
    if ([self init])
    {
        self.number = string;
    }
    return self;
}
你可能也发现了,在上面的代码段中,使用了self和super这些关键字,这里也简单的说一下吧:

self是类的隐藏参数,指向的是当前调用方法的类,另一个隐藏参数是_cmd,它指向的是当前类方法的selector。

super并不是隐藏参数,它只是一个编译器的指示符,他和self都指向的是同一个消息的接受者。

当你使用self调用方法的时候,它会从当前类的方法列表里面找开始找你当前的调用的方法,如果没有就从父类里面找,找到即调用,当使用super调用方法的时候,它会从父类的方法列表里开始找你调用的方法,找到即调用。

这里还需要补充一下:在用你定义的一个类去创建一个对象时候你可以这样做:

ClassA *a= [[ClassA alloc] init] ;
或者是:

ClassA *a= [ClassA new];

new 实际上就是alloc 和init的组合,然而它是静态的方法,无法自定义初始化方法,如果你想自定义的话,那么你就需要使用第一种方法去创建,就那我刚才在上面定义了一个classA类,用它创建一个对象就可以这么做:

classA *a = [[classA alloc] initWithName:@"姓名"];

init往往是和alloc组合着用,我觉得如果是在涉及内存分配的问题里说明应该会更好一点,也许是第一天弄博客,编辑这块感觉不好使,今天就写到这吧。

(PS:原创不易,转载的时候标注一下出处吧)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值