2

バックグラウンド スレッドで sizeWithFont を呼び出しています。この sizeWithFont は、バックグラウンド スレッドの NSOperationQueue で呼び出される drawRect にあります。sizeWithFont でランダムにクラッシュすることがありました。私はグーグルで調べてきましたが、これはアップルの問題だと言う人もいるようです。これを修正するより良い方法は何ですか?

ドキュメントには、iOS 4 の時点で次のように記載されています。

UIKit でのグラフィックス コンテキストへの描画がスレッドセーフになりました。具体的には: グラフィック コンテキストへのアクセスと操作に使用されるルーチンは、異なるスレッドに存在するコンテキストを正しく処理できるようになりました。文字列と画像の描画がスレッドセーフになりました。複数のスレッドでの色とフォント オブジェクトの使用が安全になりました。

私はこのようなものを持っています:

 titleSize = [storyTitleString sizeWithFont:[UIFont fontWithName:kProximaNovaBold size:15] constrainedToSize:CGSizeMake(200, kCellMaximumTitleHeight) lineBreakMode:UILineBreakModeWordWrap];

私の drawRect で。storyTitleString は、任意の文字列に置き換えることができます。また、このライブラリを使用して、バックグラウンド スレッドで描画を実行します。

4

1 に答える 1

4

UIKit はスレッドセーフではないため、バックグラウンド スレッドでは何も呼び出すことができず、断続的なバグが発生します。最善の策は、操作がメイン スレッドで開始される前に UIKit から必要なすべてを計算するか、操作の実行中にメイン スレッドに切り替えることです。

于 2013-02-19T22:22:31.327 に答える