我正在学习可可绘画技术。我在我的drawRect方法中从NSRects创建了两个NSBezierPath对象,一个对象永不改变,而另一个则根据发生的事情改变宽度。

因此,很可能我的drawRect被调用了很多次,但是每次都重新创建两个NSBezierPath对象似乎是错误的,最好只是更新第二个NSBezierPath宽度(或更新其NSRect)。

我可以这样做吗?我试图在initWithFrame方法中创建第一个NSBezierPath,但这似乎引起了问题。

最佳答案

让视图在其initWithFrame:方法中创建两个贝塞尔路径,然后(如果您未使用GC)在dealloc中释放它们。

对于灵活大小的路径,drawRect:应该找出正确的宽度,并从the path's bounds收集路径的当前宽度,然后从use an affine transformation收集路径以适当的比例缩放。这将允许您在视图的整个生命周期内重复使用相同的两个路径对象。

也就是说,正如谚语所说,过早的优化是万恶之源。在发现应用程序运行缓慢并在Shark或Instruments下运行并证明这些对象的高周转率是一个真正的问题之前,您不必担心。在没有其他必要之前,让清晰的代码成为您的优先事项。

关于cocoa - drawRect-重用NSBezierPath,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2261983/

10-10 20:45