如何在Objective-C中继承NSWindow的初始化

如何在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 

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