我有一个简单的类
MyView
,它是从NSView
继承而来,其中包含实例变量NSImage * image;
。该类的功能是在视图上绘制图像。
然而,在-drawRect:
函数中,如果image实例是在-init:
函数中初始化的,那么它总是等于nil
,如果是在-awakeFromNib:
函数中初始化的,则不为nil
。日志显示-init:
和-awakeFromNib:
函数仅被调用一次。
默认情况下,-awakeFromNib:
是否会重新初始化GUI组件?
-initWithFrame
根本没有被调用(https://dev59.com/xXRC5IYBdhLWcg3wCMc6)。 - jlstreckerinitWithFrame:
才不会被调用:当它继承自另一个存在于 IB Palette 中的NSView
子类(例如NSImageView
),并且你通过更改身份检查器中的类来创建你自定义子类的实例。在这种情况下,AppKit 子类的initWithFrame:
将被调用,并且你的自定义子类将在awakeFromNib
之前得到initWithCoder:
。如果你在 IB 中使用“自定义视图”对象创建视图实例,则确实会调用你的视图的initWithFrame:
。 - jscsNSView
子类设置为其类。 我没有收到对initWithFrame:
的调用; 尽管会调用awakeFromNib
。 这是在macOS 10.14.1上,使用Xcode 10.1。 - legends2kinitWithFrame
的调用;但它确实收到了对initWithCoder
的调用。 - Jon Schneider