我正在Swift中構建一個iOS應用程序,並在Apple提供的Lister示例項目上繪圖。在Swift的NSObject子類的初始化程序中調用super.init()
Lister使用兩個模型對象:List和ListItem。我發現他們都不會在初始化器中調用super.init()
,即使它們是NSObject的子類。
但是,在Lister的Objective-C版本中,兩個模型對象(AAPLList和AAPLListItem)都會調用[super init]
。
的雨燕編程語言明確規定,「指定的初始化程序必須調用從他們的直接超類的指定初始化方法。」(在初始化初始化程序鏈接的規則1)
這是怎麼回事?爲什麼這是一個例外,如果你不應該總是在子類中調用super.init(),什麼規則適用?