簡體   English   中英

創建新的指定初始值設定項時,是否必須覆蓋init?

[英]Must you override init when you create a new designated initializer?

我已經在objective-c對指定和便利初始化器進行了相當多的閱讀,並且我對它們的使用方式和原因有了很好的理解。 我只有幾個突出的問題,其中一個是真的。

假設您有一個直接從NSObject繼承的類,並為它創建一個指定的初始值設定項。

我意識到你現在可以使用NS_DESIGNATED_INITIALIZER標記你的指定初始值設定項,但是我想知道這是否意味着它會強制你在同一個類中分別通過調用指定的初始化程序來覆蓋init?

其次,如果你不使用這個宏,那么在調用指定的初始值設定項時,NOT明確覆蓋init的含義是什么呢? 我意識到編譯器不會知道哪個是指定的初始化程序,所以可能有什么不好的,並且當你為你的類創建一個新的指定的initalizer時,它是否也是優秀的做法?

編輯:我只想進一步澄清這個問題。 我已經看到好的編碼器的例子沒有添加一個不同的方法來覆蓋init,盡管已經添加了他們自己制作的指定初始化器。 當我問你是否應該覆蓋init時我的意思是除了創建你自己的特定指定初始化器,當然應該調用它的超類的init方法。 我見過一個好的程序員沒有這樣做,所以我想知道為什么你會這樣做。

您現在可以使用NS_DESIGNATED_INITIALIZER標記您指定的初始化程序,但我想知道這是否意味着它會強制您在同一個類中單獨覆蓋init,並調用指定的初始化程序?

在self中調用任何初始化程序將繞過警告。 當我嘗試調用super.init方法時,我收到以下警告。

方便初始化程序錯過了對另一個初始化程序的“自我”調用。

通過調用指定的初始化程序,NOT顯式重寫init會帶來什么影響呢?

這意味着您的對象可能缺少它需要運行的一些重要信息,或者該應用程序假設該對象始終具有該對象,如果它沒有它,則可能導致應用程序中的錯誤或崩潰。

以下是對其工作原理的一個很好的解釋:

http://timekl.com/blog/2014/12/09/objective-cs-designated-secret/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM