2014-03-04 46 views
1

如何覆蓋init方法返回其他類?像這樣如何覆蓋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中,有什麼區別?

順便說一句,使用類的方法來實現沒有討論,我只關心如何重寫init方法返回其他類?

回答

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]; 
} 
+0

對於非弧,只有alloc但不是init,是否可以? – simalone

+0

@simalone很好。除非你在'dealloc'中做了一些奇怪的事情,這需要'init' –

+0

奇怪的東西,比如說什麼? – simalone