当我必须使用self = [super init]时

时间:2012-08-01 07:29:17

标签: objective-c

  

可能重复:
  Why should I call self=[super init]

我一直在读一本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

1 个答案:

答案 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方法中执行重要工作。