i 仅想知道,在一生中,它是如何做到的。
这很简单。 在所有班次中,有99.9%的人将用某种方式继承。 在初始设计者中,您应援引<代码>super指定初始设计人,并将其指定为<代码>自封/代码>。 最终,[super init]
将援引-[NSObject init]
。 根据号文件,执行如下:
- (id)init {
return self;
}
因此,如果你直接从<代码>NSObject继承,你或许可以安全而不必指定<代码>本身 = [超级 init];,因为你知道(和你再次保证)这相当于:<代码>自封;,这是无意义的。 不管怎样,你为了一致性而离开。
However, once you start getting further down the inheritance chain, and especially when you re inheriting from opaque classes (ie, a class whose .m file you do not have), then things start getting shady. It is possible that you ll come across a class whose designated initializer looks something like this:
- (id) initWithFoo:(id)aFoo {
if ([aFoo isSuperFast]) {
[self release];
return [[SuperFastFooWrapper alloc] initWithFoo:aFoo];
}
self = [super init];
if (self) {
_foo = [aFoo retain];
}
}
这是常见的,但确实发生。 在这种情况下,我们重新销毁了<代码>本身([自发布]
,以平衡紧随其后的<代码>alloc呼号”,而是退回了另一个物体。