如何覆盖init方法返回其他类?

时间:2014-03-04 03:10:28

标签: objective-c

如何覆盖init方法返回其他类?喜欢这个

ClassA.m

- (id)initWithType:(int)type{
    if(type == 0){
        return [[ClassB alloc] init];
    }
    else if(type == 1){
        return [[ClassC alloc] init];
    }

    return [self init];
}

id classInstance = [[ClassA alloc] initWithType:someType];

那么,在ARC中,我是否应该关心ClassA的alloc操作?

而且,在NonARC中,有什么区别?

BTW,使用类方法实现不在讨论中,我只关心如何重写init方法返回其他类?

1 个答案:

答案 0 :(得分:0)

使用ARC,您的代码看起来很好。对于非ARC,您需要发布self

- (id)initWithType:(int)type{
    if(type == 0){
        [self release]; self = nil;
        return [[ClassB alloc] init];
    }
    else if(type == 1){
        [self release]; self = nil;
        return [[ClassC alloc] init];
    }

    return [self init];
}