我一直在读一本Objective C的书,并创建一个包含其他类(组合)的类,它使用self = [super init]
- (id) init
{
if (self = [super init]) {
engine = [Engine new];
tires[0] = [Tire new];
tires[1] = [Tire new];
tires[2] = [Tire new];
tires[3] = [Tire new];
}
return (self);
} // init
当他创建另一个类时,他不包含这个init方法,我知道它需要初始化它将使用的实例对象,但我不明白为什么他把self = [super init]当一个班级需要这个陈述时。
@interface Tire : NSObject
@end // Tire
@implementation Tire
- (NSString *) description
{
return (@"I am a tire. I last a while");
} // description
@end // Tire
答案 0 :(得分:0)
new
是一个类方法,它只是告诉类自己执行alloc / init。记录here。上面的代码可以改写为:
- (id) init
{
if (self = [super init]) {
engine = [[Engine alloc] init];
tires[0] = [[Tire alloc] init];
tires[1] = [[Tire alloc] init];
tires[2] = [[Tire alloc] init];
tires[3] = [[Tire alloc] init];
}
return (self);
}
它会产生完全相同的效果,但需要更多的输入。
在Engine和Tire类中,他们的init方法(如果已实现)将使用self = [super init]
。如果您的类在init
方法中没有做任何特殊操作,则不需要实现一个,但如果执行实现一个,则必须使用self = [super init]
,因为您需要正确创建对象,并且您的超类可能正在其init方法中执行重要工作。