如何在Objective-C中继承NSWindow的初始化
问题描述:
我想创建一个NSWindow
的子类。这个子类在使用之前需要初始化一些成员变量。在目标c中捕获初始化的最佳方法是什么?我发现init
很少以某种方式被调用,这使我可以做到这一点。 NSWindow
有几个初始化向量,我需要重写。我是否需要重写每一个?如何在Objective-C中继承NSWindow的初始化
答
每类应该有一个所谓的指定初始化。这是所有其他init方法调用的init方法。这是一个重写。文档通常会告诉您指定的初始化程序是哪一个。在NSWindow
的情况下,它是:
initWithContentRect:styleMask:backing:defer:
此方法是用于NSWindow类指定初始化。
除了指定初始化,你也应该重写-initWithCoder:
如果你继承的类实现NSCoding
协议。 -initWithCoder:
是从存档(例如NIB文件)实例化实例时使用的初始值设定项。
请参阅Apple的“Objective-C编程语言”中的The Designated Initializer。
答
您是否尝试过重写指定初始化器
- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)windowStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation screen:(NSScreen *)screen
在macOS 10.12 SDK中,NSWindow的指定初始化程序不是Abizem在此指定的初始化程序,而是由Ole指出的。请注意缺少最后一个参数'screen:`。 – 2016-10-11 21:12:48
几乎看不见`screen:`param tho ...谢谢@JerryKrinock,为我节省了一些挫折 – codrut 2017-10-17 10:44:08