代码改变世界

构造方法

2019-05-18 23:30  iCoderHong  阅读(136)  评论(0编辑  收藏  举报

对象的构造方法

创建一个对象, 我们直接通过new方法就可以创建一个OC实例对象。这个+new方法是继承NSObject获得的。其实创建对象+new方法分为两个过程的。

// 调用+aalloc分配存储空间
CHPerson *p = [CHPerson alloc];
// 调用-init初始化
p = [p init];

+alloc方法是分类内存空间,并将内存空间的地址返回,此时的对象内存空间是不可直接使用,需要调用-init进行初始化。

 开发中创建对象一般不直接使用+new方法去创建对象,因为通常需要在对象的初始化做一些操作。这也就需要自定义构造方法了。

 自定义构造方法

通常自定义无参的构造方法写发都是如下:

// 重写init方法
- (instancetype)init  {
    if(self = [super init]) { // 确保初始化成功

    }
    return self;
}

在OC中任何类都是继承NSObject,其实初始化-init方法都是继承NSObject而拥有的,所以初始化的通过都是父类的-init方法完成的,因此必须调用 [super init]

[super init]返回的就是当前对象本身,为了保证初始化没问题,添加了if判断。这样做的目的是涉及到运行时

下面通过一张图来更好展示为什么之类自定构造方法先调用 [super init]设计原理

 

 自定义有参构造方法

在初始化对象做一些操作是需要外界的传入参数,因此我们可以自定义有参的构造方法

自定有参构造方法注意细节:

1.返回值是instancetype

2.方法名以initWith开头

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