2017-04-23 65 views
0

我是Objective C的新手。我在理解init()方法時遇到了問題。我已經在Apple網站上閱讀了這兩行代碼:目標C中需要init()

  1. NSObject類中定義的init()方法沒有初始化;它只是返回自我。 (https://developer.apple.com/reference/objectivec/nsobject/1418641-init

  2. 您必須使用init ...方法來完成初始化過程。 (https://developer.apple.com/reference/objectivec/nsobject/1571958-alloc

如果「它沒有初始化」,我是否需要調用init()來初始化對象?爲什麼?

+0

是的,你總是在'alloc'後面調用'init'方法。爲什麼?那麼,如果沒有其他原因,因爲他們非常一致,並一再告訴我們我們必須這樣做。請參閱[使用對象](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithObjects/WorkingwithObjects.html#//apple_ref/doc/uid/TP40011210-CH4-SW7)if你正在尋找更多的參考。 – Rob

回答

1

從​​:

如果一個對象沒有實現初始化,可可調用 初始化其最近的祖先,而不是。

是的,你需要調用某種形式的init來創建你的對象在heap。 init將一個點返回到內存位置。不,您不需要爲您的自定義對象編寫init,除非默認的設置所有零初始化不足

+2

在'-init'中,對象已經被創建「在堆上」。否則它不能接收'init'。 –

2

當一個實例對象與+alloc創建的,它得到一個完全建立的基礎設施和所有的ivars都設置爲0NULLnil0.0(或任何IST爲伊娃的類型的零值)。

如果這對於課程是足夠的,則不需要覆蓋-init,它可以簡單地使用NSObject的初始值。 (-initNSObject根本什麼都沒做。)這是實現者的方。這就是你在1)所指的。

用戶類(即代碼,創建實例)的,必須發送init到新創建的實例給它機會初始化自己。這是你在2)所提到的。

作爲類的用戶,您根本無法知道也不應該知道類是否需要在其初始化過程中使用一些代碼。所以發送消息,即使它可能沒用。