NSView初始化:-init:vs. -awakeFromNib:

时间:2011-03-21 05:15:46

标签: objective-c cocoa user-interface nsview

我有一个简单的类MyView,它继承自NSView和实例变量NSImage * image;。类功能是在视图上绘制图像。

但是,在-drawRect:图片实例中始终等于nil,如果它在-init:函数中初始化,而在nil中初始化时不是-awakeFromNib:。日志显示-init:-awakeFromNib:函数仅被调用一次。

默认情况下-awakeFromNib:重新初始化GUI组件吗?

1 个答案:

答案 0 :(得分:9)

没有。 awakeFromNib没有默认实现。

您的问题是您正在覆盖错误的初始化方法。 NSView的{​​{3}}是initWithFrame:。你的子类的普通init永远不会被调用,这就是你的image ivar没有指向任何东西的原因。

您可以在awakeFromNibinitWithFrame:中初始化该ivar。没什么区别。前者在后者之后调用,它作为一个点提供,您可以插入需要与笔尖中的其他对象交互的初始化代码(通过IBOutlets)。