2013-08-19 20 views
-1

看來我看到他們都在。考慮到它們不相互繼承,這很有趣。他們也有一些共同的祖先,但哪一個擁有initWithCoder和iniwWithNibName?是UIView或UIViewController的initWithNibName和initWithCoder方法嗎?

那麼是什麼給?

在UIViewController中引用類的initWithCoder

也不是在所有

-(id)initWithCoder:(NSCoder *)aDecoder 
{ 
    //NSString * superClass =NSStringFromClass([self superclass]) ; 
    self = [self initWithNibName:nil bundle:nil]; 
    if (self) { 
    } 
    return self; 
} 
+0

UITextField和UILabel不會相互繼承,但它們都具有'text'屬性。它是UILabel屬性還是UITextField屬性? – Jsdodgers

+0

他們都從UIView繼承。 –

+0

從什麼時候開始UIView有一個'text'屬性? – Jsdodgers

回答

4

這樣的問題應該以參考文檔中的搜索開始。

initWithNibName:bundle:UIViewController的方法,沒有其他類(除了擴展類UIViewController)。

initWithCoder:是在NSCoding協議中聲明的方法。任何符合NSCoding協議的類(並且有很多)將有一個initWithCoder:方法。 UIViewUIViewController都實現了NSCoding協議,這意味着兩個類都有initWithCoder:

+0

這是正確的答案。我檢查了參考。 initWithCoder似乎不是UIViewController的成員。現在我知道它是UIViewController和UIView都具有的協議的成員。 –

+0

而你認爲這是一個糟糕的問題?人們通常會認爲initWithCoder與xib有關,因爲它們在UIView或UIViewController在xib中顯示時被調用。結果發現它們與NSCoding有關,與XIB一般無關。我認爲這對許多人有用。 –

+0

@SeptiadiAgus我從來沒有說過這是一個糟糕的問題。你爲什麼這樣說? – rmaddy

0

提到的initWithCoder,initWithNibName都意味着你可以使用的.xib文件創建視圖。

+2

'initWithCoder:'意味着不僅僅是能夠使用xib。 – rmaddy