2012-09-27 60 views
3

請考慮http://developer.apple.com/library/ios/#documentation/general/conceptual/CocoaEncyclopedia/Initialization/Initialization.html中的以下文字。確定跳過繼承類中的init方法嗎?

當你創建一個子類時,繼承的初始值是一個問題。有時候,超類init ...方法可以充分地初始化你的類的實例。但是因爲它更可能不會,所以你應該重載超類的初始化器。如果你不這樣做,超類的實現被調用,並且因爲超類對你的類一無所知,所以你的實例可能沒有被正確初始化。

在同一頁上,我覺得這樣的文字:

聲明實例變量應該實現一個初始化的每一個對象的方法,除非默認設置一切到零初始化就足夠了。

我的問題是: 如果我跳過init方法在類B,其中B類從A繼承,我可以相信B的非繼承成員變量被設置爲零?

回答

2

我的問題是:如果我跳過B類,其中B類從A 繼承,可我相信B的非繼承成員變量 設置爲零init方法?

目的-C將set all ivars of any new object to zero

的ALLOC方法動態分配存儲器,用於新對象的 實例變量和它們全部初始化爲0,所有,即除 連接在ISA可變新的實例到它的類。對於 對象有用,它通常需要更完全地初始化 。這是init方法的功能。

因此,如果您沒有任何需要初始化的ivars /屬性,那麼可以跳過爲您的類實施初始化方法。當然,您必須通過調用-init或其他初始化方法來初始化新對象,以便超類有機會初始化自己。

1

是的,B類的非繼承成員變量將爲零。繼承的變量將具有在A類的init方法中設置的任何值(如果未設置,則爲零)。