iOS APP 开发 OC 第十六天,初始化器概述

tags: OC 30 day

创建对象,类名 *指针名 = [类名 new];

new实际上是一个类方法。
new 方法的作用:

创建对象初始化对象把对象的地址返回

new 方法的内部,其实事先调用了 alloc方法,再调用了init方法。

什么是 alloc 方法?

alloc方法是一个类方法
作用: 那一个类调用这个方法,就创建那个类的对象,并把对象返回。

什么是 init 方法?

作用:初始化对象,为对象的属性赋初始值,这个init方法我们叫做构造方法。
init方法做的事情:初始化对象。
为对象的属性赋默认值。
如果属性的类型是基本数据类型就赋值为0
c指针 NULL
OC指针 nil

所以,我们创建一个对象如果没有为这个对象的属性赋值,这个对象的属性是有默认值的。
所以,我们每次新创建一个对象,这个对象的属性都被初始化了。

创建对象的完整步骤

应该是先使用 alloc创建一个对象,然后再使用init初始化这个对象,才可以使用这个对象。
虽然没有初始化的对象有的时候也可以使用,但是千万不要这么做。
使用一个未经初始化的对象是极其危险的。

alloc 相当于申请内存空间,init 再初始化对象。

Person *p1 = [Person new];
完全等价于
Person *p1 = [[Person alloc]init];

我们想要让创建的对象属性的默认值不是nil NULL 0

而是我们自定义的。
那么这个时候,我们就可以重写init方法。在这个方法。在这个方法中按照我们自己的想法为对象的属性赋值。
重写init方法的规範:

必须先调用父类的init方法,然后方法的返回值复职给self。调用init方法初始化对象有可能会失败,如果初始化失败。返回的就是nil。判断父类初始化是否成功。判断self的值是否为nil,如果不为nil说明初始化成功。如果初始化成功,就初始化当前对象的属性。最后,返回self的值。

为什么要调用父类init的方法?
因为父类的init方法,会初始化父类的属性,所以必须要保证当前对象中的父类属性也同时被初始化。
为什么要赋值给self?
因为,调用父类的init方法,会返回初始化成功对象。实际上返回的就是当前对象。但是我们要判断是否初始化成功。

重写init 方法:

- (instancetype)init{if(self = [super init]){//初始化当前属性的代码;}return self;}

什么时候需要重写init方法:

如果你希望创建出来对象的属性的默认值不是nil NULL 0 而是我们指定的值。那么这个我们就可以重写init方法。

但是这样每次创建出来的对象属性值都是一样的。

我希望创建对象的时候,对象的属性值由创建对象的人来指定,而不是写死在init方法中。

自定义构造方法的返回值instancetype。自定义构造方法的名称必须以initWith开头。方法的实现与init的要求一样。
-(instancetype)initWithName:(NSString *)name andAge:(int)age{if(self = [super init]){self.name = name;self.age = age;}return self;}

什么时候要自订义构造方法

在你需要初始化同时赋值。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章