这些都是相当简单的问题,但在继续之前我想先弄清楚这些问题......
@interface BasicTire : NSObject {
}
@end
@interface SnowTire : BasicTire {
}
@end
当您调用 [SnowTire init] 时,包含的 [super init] 会调用 [BasicTire init],而 [BasicTire init] 又会调用 [NSObject init]? (即级联运行到父类/父类(super class)。
当您[SnowTire alloc]时,您正在创建一个新对象,其中包括其父类(super class)的功能。我的想法是否正确,您没有创建以某种方式链接的多个对象(即 SnowTire > BasicTire > NSObject)。
只是想检查一下...
加里
最佳答案
是的,通常初始化器调用父类(super class)初始化器。这是在
init
方法的实现中显式完成的。虽然可以调用同一类或其父类(super class)的其他初始化程序,但有必要确保 "designated initializer"总是有人打电话。
如果一个对象没有实现init
(或有问题的初始化器),则调用父类(super class)中的对象(与任何其他方法一样)。这种情况并不罕见,因为在 Objectve-C 中实例变量总是初始化为零(在alloc
中),因此通常不需要实现专门的init
。alloc
只是分配内存并设置确定对象类的对象的“isa 指针”。您从中得到的是一个未初始化的对象(不是链表),它有空间容纳其所有实例变量(包括父类(super class))。
关于objective-c - 对象化妆,它是如何构建的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1471587/