码迷,mamicode.com
首页 > 其他好文 > 详细

OC中自定义init方法

时间:2018-07-26 23:40:47      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:类型   super   nbsp   内容   会同   java   解决   不能   完成   

---恢复内容开始---

我们知道,在函数中实例化一个对象,大多数会同时进行初始化,如 Person *p =[ [Person alloc]init];

此时已经进行了初始化,使用init方法,那么我们能不能重写init方法呢,让它可以在初始化的时候直接赋值,可以从内部赋值也可以从外部赋值。我们先把代码写出来然后进行分析:

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

        self.age = 30;
    }
    return self;
}

在这块代码中,除去self.age = 30;该结构是构造方法的固定模式。在这里我们不得不提及 self,self可以用来调用方法,类方法和实例方法都可以用self调用,那么self是什么?我们不需要知道self是什么,因为self时刻在变,一句话,当前的方法是谁在调用,self就是谁。self类似于C++和Java中的this,大家可以参照理解。我们来实例化一个对象,P在此处的代码中,self指的是 p ,因为age是p的属性。这块代码,-(id),指的是任何类型,假设我们不知道返回值self是什么类型,我们也不必担心,因为-(id)可以指代任何类型。if(self = [super init]),括号内是对self进行初始化,括号外是if,意思是初始化成功才向后执行,失败则直接返回,系统回收已分配的资源。几乎没有初始化失败的情况,但我们为了避免失败,还是要进行判断。在随后对年龄进行赋值,年龄为30,在这个方法中,我们是从内部对年龄进行初始化,直接在.m文件中直接实现,不需要在.h文件中先声明。在主函数实例化对对象的时候,对象的年龄就是30,而不需要另外赋值。这是内部初始化,还有外部初始化。外部初始化需要在.h文件中声明,然后在.m文件中实现。我们来看具体代码:

//声明

-(id)initWithName:(NSString *)aNme andAge:(NSInteger)aAge;

//实现

-(id)initWithName:(NSString *)aNme andAge:(NSInteger)aAge{

    self.name = aName;

    self.age = aAge;

}

我们在主函数中进行实例化对象的时候,选择我们自定义的方法,由我们手动控制需要初始化的值从而完成初始化,这就是外部赋值。本人是初学者,大家有问题都可以进行评论我们共同解决。感谢阅读。

---恢复内容结束---

OC中自定义init方法

标签:类型   super   nbsp   内容   会同   java   解决   不能   完成   

原文地址:https://www.cnblogs.com/li-wei203/p/9374674.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!