Cocoa 如何说出什么';是什么导致调用drawRect的?

Cocoa 如何说出什么';是什么导致调用drawRect的?,cocoa,debugging,nsview,Cocoa,Debugging,Nsview,我有一个自定义的NSView,里面有一堆自定义按钮,这些按钮作为子视图添加到NSView的drawRect方法中 现在我发现在按下一个按钮之后,父视图的drawRect会被反复调用。有时,它只在我退出应用程序时停止——我从drawRect中的一个简单日志语句中知道这一点 现在我知道在我的应用程序中可能有更大的架构问题导致了这一点,我该从哪里开始追踪导致此视图被反复重画的原因 谢谢 首先,您不应该在drawRect:中添加子视图 您是在进行自定义绘图还是只添加子视图?如果不进行任何绘图,则不应实现

我有一个自定义的NSView,里面有一堆自定义按钮,这些按钮作为子视图添加到NSView的drawRect方法中

现在我发现在按下一个按钮之后,父视图的drawRect会被反复调用。有时,它只在我退出应用程序时停止——我从drawRect中的一个简单日志语句中知道这一点

现在我知道在我的应用程序中可能有更大的架构问题导致了这一点,我该从哪里开始追踪导致此视图被反复重画的原因


谢谢

首先,您不应该在
drawRect:
中添加子视图

您是在进行自定义绘图还是只添加子视图?如果不进行任何绘图,则不应实现
drawRect:

您希望在
initWithFrame:
中添加子视图,然后根据
self.bounds
layoutSubviews
中设置子视图的框架

如果您有任何问题,请随时提问

编辑:刚刚意识到您询问的是NSView而不是UIView。我从未使用过NSView,但它们的工作原理可能类似


编辑2:我读了一点关于NSView的内容,它似乎没有
布局子视图
。也许您应该在
drawRect:
中设置帧?我仍然非常确定您不想在
drawRect:

中添加子视图。首先,您不应该在
drawRect:
中添加子视图

您是在进行自定义绘图还是只添加子视图?如果不进行任何绘图,则不应实现
drawRect:

您希望在
initWithFrame:
中添加子视图,然后根据
self.bounds
layoutSubviews
中设置子视图的框架

如果您有任何问题,请随时提问

编辑:刚刚意识到您询问的是NSView而不是UIView。我从未使用过NSView,但它们的工作原理可能类似


编辑2:我读了一点关于NSView的内容,它似乎没有
布局子视图
。也许您应该在
drawRect:
中设置帧?我仍然非常确定您不想在
drawRect:

中添加子视图,非常感谢您的回答-我没有意识到我滥用了drawRect。我已经删除了子视图的添加,并确保只在必要时调用它,现在一切正常。非常好,谢谢你的回答-我没有意识到我滥用了drawRect。我已经删除了子视图的添加,并确保只在必要时调用它,现在一切正常。