2010-11-24 56 views
8

我想創建一個NSWindow的子類。這個子類在使用之前需要初始化一些成員變量。在目標c中捕獲初始化的最佳方法是什麼?我發現init很少以某種方式被調用,這使我可以做到這一點。 NSWindow有幾個初始化向量,我需要重寫。我是否需要重寫每一個?如何在Objective-C中繼承NSWindow的初始化

回答

8

每類應該有一個所謂的指定初始化。這是所有其他init方法調用的init方法。這是一個重寫。文檔通常會告訴您指定的初始化程序是哪一個。在NSWindow的情況下,它是:

initWithContentRect:styleMask:backing:defer:

此方法是用於NSWindow類指定初始化。

除了指定初始化,你也應該重寫-initWithCoder:如果你繼承的類實現NSCoding協議。 -initWithCoder:是從存檔(例如NIB文件)實例化實例時使用的初始值設定項。

請參閱Apple的「Objective-C編程語言」中的The Designated Initializer

2

您是否嘗試過重寫指定初始化器

- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)windowStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation screen:(NSScreen *)screen 

Documentation

+1

在macOS 10.12 SDK中,NSWindow的指定初始化程序不是Abizem在此指定的初始化程序,而是由Ole指出的。請注意缺少最後一個參數'screen:`。 – 2016-10-11 21:12:48

+0

幾乎看不見`screen:`param tho ...謝謝@JerryKrinock,爲我節省了一些挫折 – codrut 2017-10-17 10:44:08