UIFont
(of Cocoa-Touch/iOS)がスレッドセーフであるかどうかは誰にでも確認できますか?つまり、メインスレッドの外側にあるスレッド内からの使用は安全ですが、インスタンスはスレッド間で共有されませんか?UIFontスレッドは安全ですか?
問題は私がそれをやっていて、[NSString sizeWithFont:]
でランダムクラッシュが発生していて、おそらく私がメインループの外側からUIFont
を使用すべきではないと考え始めたことでしょうか?
さらに、Apple's documentation on UIFont
は他のスレッドから使用できるかどうか疑問に思っています。
allocおよびinitメソッドを使用してUIFontオブジェクトを作成することはありません。その代わりに、UIFontのクラスメソッドを使用して、目的のフォントオブジェクトを検索して取得します。
UIFont
どこか記憶されているインスタンスのキャッシュを有しており、インスタンスが誤って複数のスレッドで使用することができ、問題を引き起こす可能性があるので、したがって、メインスレッドの外部からUIFont
オブジェクトを使用するのは良い考えではないかもしれないよう
上記宣伝文が鳴り。ヘック、UIFont
のインスタンスキャッシュは、スレッドの競合の原因になることさえあります。
これに誰かが光を当てることができますか(帰属リンク/証拠あり)?
ありがとうございました
この別のスレッドのUI要素(ラベル、テキストフィールドなど)にもアクセス/変更していますか? –
いいえ、バックグラウンドで一部の文字列のサイズを測定するためにのみ使用します。理由がわからない、ランダムクラッシュが発生しています。とにかく私はその実装をNSAttributedString/CTFontから作られた同等のものに置き換えました。そして、過去の日にその領域にクラッシュはありませんでした。 – adib
興味深いニュース。これは回避策のように聞こえます。 –