2013-10-12 45 views
0

在SomeViewController叫,我想使用自定義的init方法,同時禁用-initWithNibName:bundle:定義的另一個init方法,但initWithNibName:束仍然由系統

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    NSAssert(NO, @"use -initWithChannel:tag: instead"); 
    return nil; 
} 

- (instancetype)initWithChannel:(NSString *)channel tag:(NSString *)tag 
{ 
    if (self = [super init]) { 
     self.channel = channel; 
     self.tag = tag; 
    } 
    return self; 
} 

但是當我打電話-initWithChannel:tag:-initWithNibName:bundle:是正確的叫在-[UIViewController init]之後,爲什麼會發生這種情況?

回答

1

當您撥打[super init]您的UIViewController的初始化調用initWithNibName。請參閱here

+0

但爲什麼它調用我的'initWithNibName'而不是'[UIViewController initWithNibName]'? – limboy

+0

繼承。它調用[self initWithNibName],所以如果你重寫它,它會調用你的。 – Joel

+0

所以在super方法中,如果它調用'self',那真的是調用'parent'就是這種情況嗎? – limboy

相關問題