2010-08-27 48 views
1

是否有任何howtos?我如何使用Cocoa/CoreText/Quartz进行多线程绘图

背景画线的最佳做法是什么?

可以将[NSView drawRect]中的矩形数据存储到队列中并让后台线程获取矩形并创建一些位图并将数据呈现到位图中,然后使用performSelectorOnMainThread:withObject来绘制它?或者我可以直接从背景画出一个背景。

我从Bunny Laden买了一本书“Programming with Quartz 2D”,但还没有读过它,书中没有提到多线程的提示。在正常的Apple API参考页面中也找不到任何东西。

回答

1

是的,可以将[NSView drawRect]中的矩形数据存储到队列中,并让后台线程获取矩形并创建一些位图并将数据呈现到位图中,然后使用performSelectorOnMainThread:withObject来绘制它。

只要你以线程安全的方式做到这一点。

这与绘图没有任何关系,所以没有理由在“用Quartz 2D编程”(这是一本很棒的书 - 你绝对应该轮到阅读它)中提到它。您可能需要一本关于多线程的配套书籍。

只要考虑你的问题的第一部分。你如何将队列存储在队列中?将它添加到NSMutableArray?不是线程安全的。

Grand Central Dispatch会提供很多帮助(您没有提及您希望支持的平台)。

+0

嗯,我喜欢posix pthreads所有同步的东西。但我的问题是如果NSFont,NSColor,NSImage或石英对应物都是线程安全的 - 至少当我保证我的代码一次只从一个线程调用一个对象时。如果可能将对象从一个线程传递到另一个线程,那么它们不能使用全局变量或线程局部变量。 – Lothar 2010-08-27 10:37:29

+0

线程安全意味着您不必保证一次只能使用一个线程。如果你能保证那么问题就解决了。一些gui类必须在主线程中使用 - 这与线程安全无关 - 这是因为runloops,notificatons等。 NSImage可能属于这一类。坚持石英和coretext。 – hooleyhoop 2010-08-28 07:38:07