2010-02-14 40 views
2

我在學習Cocoa繪圖技巧。我在drawRect方法中從NSRects創建了兩個NSBezierPath對象,一個永遠不會改變,另一個根據發生的情況改變寬度。drawRect - 複用NSBezierPath

所以在所有可能的情況下,我的drawRect被調用了很多次,但每次重新創建兩個NSBezierPath對象似乎都是錯誤的,最好是更新第二個NSBezierPath寬度(或更新其NSRect)。

我可以這樣做嗎?我試圖在initWithFrame方法中創建第一個NSBezierPath,但它似乎導致了一個問題。

+0

「......它似乎導致了一個問題。」如? – 2010-02-14 17:29:51

+0

首先,沒有任何事情發生,其次,它似乎導致「錯誤訪問」錯誤。 – mootymoots 2010-02-14 17:32:18

+0

mootymoots:聽起來像你沒有正確擁有你創建的路徑。查看內存管理規則:http://developer.apple.com/mac/library/documentation/General/Conceptual/DevPedia-CocoaCore/MemoryManagement.html將消息發送給死對象是獲取「錯誤訪問」崩潰的好方法。 – 2010-02-14 17:37:40

回答

1

讓視圖在其initWithFrame:方法中創建Bézier路徑,並且(如果您未使用GC)在dealloc中釋放它們。

對於靈活大小的路徑,drawRect:應該找出正確的寬度和the path's bounds收集路徑的當前寬度,然後use an affine transformation通過適當的因子來縮放的路徑。這將允許您在視圖的整個生命週期中重複使用相同的兩個路徑對象。

這就是說,正如諺語所說,不成熟的優化是一切罪惡的根源。你不應該擔心這件事,直到你發現應用程序變慢,並在Shark或Instruments下運行,並證明這些對象的高營業額是一個真正的問題。讓清晰的代碼成爲你的優先事項,除非必要。