对象的构造方法
创建一个对象, 我们直接通过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; }