在派生类

时间:2018-01-15 09:21:20

标签: macos cocoa nsview drawrect

是否有必要从重写的drawRect调用[super drawRect:dirtyRect]? 我见过[super drawRect:dirtyRect]

的例子

根本没有被调用

-(void)drawRect:(NSRect) dirtyRect
{
 // derived class code here
}
在派生类代码

之前调用

-(void)drawRect:(NSRect)dirtyRect
{
 [super drawRect:dirtyRect];
 // derived class code here
}
在派生类代码

之后调用

-(void)drawRect:(NSRect)dirtyRect
{
 // derived class code here
 [super drawRect:dirtyRect];
}

根据标准或规范,所有这些都是正确的(特别是不要调用super drawRect)或者它们恰好正常工作并且可能会打破一些时间。我的意思是它是一个简单的继承案例,其中派生类必须覆盖保持基类行为?

参考答案会有所帮助。

1 个答案:

答案 0 :(得分:0)

Per NSView Docs

  

默认实现不执行任何操作。如果子类执行自定义绘制,则子类应覆盖此方法。

     

...

     

如果您的自定义视图是直接的NSView子类,则无需调用super。对于所有其他视图,请在实现中的某个时刻调用super,以便父类可以执行任何其他绘制。