2012-03-22 159 views
2

任何人都可以确认UIFont(Cocoa-Touch/iOS)是否线程安全?也就是说,在主线程之外的线程中使用它是否安全,但是线程之间不共享实例?UIFont线程安全吗?

问题是,我这样做,我得到了[NSString sizeWithFont:]随机崩溃,并开始想,也许我不应该从主运行循环外使用UIFont

此外Apple's documentation on UIFont让我怀疑它是否可以从其他线程使用。

您不使用alloc和init方法创建UIFont对象。相反,您使用UIFont的类方法查找并检索所需的字体对象。

上述书籍说明听起来像UIFont具有存储在某处一个实例的高速缓存,因而它可能不使用UIFont对象从主线程以外的好主意,因为一个实例可能会无意中被多个线程使用,并且可能会导致问题。哎呀,UIFont实例缓存甚至可能是线程争用的来源。

有没有人可以对此有所了解(可归因的链接/证据)?

谢谢

+0

您是否还在这个单独的线程中访问/修改任何UI元素(标签,文本区域...)? – 2012-03-22 08:28:14

+0

不,只用它来测量背景中某些字符串的大小。得到随机崩溃,不知道为什么。无论如何,我已经用NSAttributedString/CTFont所做的等效替换了该实现,并且过去一天中该区域没有发生任何崩溃。 – adib 2012-03-23 00:10:27

+0

有趣的消息。这听起来像一个解决方法:)希望你把它关掉。 – 2012-03-23 08:33:59

回答

2

rokjarc是正确的。如果要更改UI元素的字体,例如字体属性UILabel对象,则应该在主线程中执行此操作。

但是如果你想在单独的线程中创建UIFont实例,你可以自由地做到这一点。 Apple文档说UIFont只为你提供静态方法。