Object-C基础之初始化方法(init)

时间:2022-04-14 19:41:37

前言

Object-C有两种文件(.h文件 .m文件),“.h”文件需要使用@interface 来定义类的公共方法,而“.m”文件是实现.h文件里面的公共方法以及封装一些其他功能私有方法。 这篇文件将要介绍的就是关于“.m”如何自定义实例化的方法

正文

init方法定义在NSObject,而我们自定义的类会直接或者间接的继承NSObject这个类。 我们在自定义的类中可以重写这个init方法,也可以自定义自己的初始化方法。
在重写这个init方法的时候需要遵循apple的规则。 一是必须执行父(super)的初始化方法,如果没有父初始化方法,则会返回nil

示例代码

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

文档解释
An object isn’t ready to be used until it has been initialized. The init method defined in the NSObject class does no initialization; it simply returns self.
In a custom implementation of this method, you must invoke super’s designated initializer then initialize and return the new object. If the new object can’t be initialized, the method should return nil. For example, a hypothetical BuiltInCamera class might return nil from itsinit method if run on a device that has no camera.

自定义初始化方法的时候也有一些特别要注意的地方。 先说明一下如何调用自定义初始化方法:比如这句代码[[NSArray alloc] initWithXXX],这里因为使用了alloc,所以后面可以跟上自己自定义的初始化方法(initWithXXX),也可以跟上重写的init方法。自定义方法的规则就是
1.返回值类型必须是id .
2.必须是init开头
3.必须调用父的init方法

Object-C还有一种在堆中创建对象的方法:[NSArray class],它和alloc区别就是class只会默认使用init初始化方法,而那些initWithXXX的方法是 无法指定给它的。