对象初始化
创建对象的两种方法:
[类名 new]
[[类名 alloc] init] // cocoa惯例
对象的创建分为对象内存空间分配和初始化两个过程,对一个类发送alloc
将会为类分配空间同时将内存区域全部初始化为0(int初始化为0, 指针初始化为nil),刚完成分配的对象应当在初始化完成后使用避免出现一些bug
初始化方法init
返回的对象和分配阶段返回的对象可能不同因此在使用上采用[[类名 alloc] init]
而不是Car *car = [Car alloc]; [car init];
// 初始化方法模板
(id) init {
if (self = [super init]) { // 将超类初始化完成后的对象赋予self
//...
}
return (self)
}
在初始化方法中,可能有些自定义属性对象不一定用的上则不必在初始化方法中就一定要将对象创建,可以通过惰性求值的方式等到调用者实际用到时在创建
lazy evaluation(惰性求值)
在init函数中没有进行创建,当在使用时先判断是否为空,如果为空则创建,这样会节省内存,提高效率
除了init外类中可以自定义其他的初始化函数便于对象的初始化赋值,但当一个父类存在多个初始化函数时子类不可能保证重写每一个父类的初始化函数,因此出现了指定初始化函数的概念,即类中某个初始化方法被指派为指定初始化函数,该类使用的初始化方法都使用指定初始化函数进行初始化操作。
然后子类只需重写指定初始化函数,当然不重写也行直接在自己的初始化函数中调用父类的指定初始化函数进行初始化