実際に問題が発生していますか?または、あなたはそれらを予期していますか?
同じバックグラウンドスレッドからUI要素を更新しようとしない限り、バックグラウンドスレッドで実行しても問題ありません。すべてのUI関連のアクティビティをメインスレッドに転送してください。例えば(擬似):あなたがバックグラウンドスレッド上の任意のインスタンス変数の値を変更している場合、それはあなたが(他のスレッドを防ぐためにself
に同期させることが重要だと
- (void)viewWillAppear:(BOOL)animated {
[self performSelectorInBackground:@selector(refreshTableView)];
[super viewWillAppear:animated];
}
- (void)refreshTableView {
// Where _listOfObjects is used to populate your UITableView
@synchronized(self) {
self._listOfObjects = [MyDataType findAllRemote];
}
[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
}
注意も(上記のように)メインスレッドのように)更新または設定中に_listOfObjects
配列内のオブジェクトにアクセスすることを禁止します。
_listOfObjects
プロパティをatomic
と宣言した場合、私は100%肯定的ではないことを心配する必要はありません(私は100%肯定的ではありません)同期ブロック。 ですが、プロパティの値を再割り当てする代わりに、単一の永続インスタンスに変更を加えた場合は、@property
宣言にかかわらずsynchronizedブロックが必要になります。 (静的なNSMutableArrayからオブジェクトを追加/削除する)
その分析のおかげで、@チャック。私は、ObjResourceの問題の原因のひとつは、継承の代わりにカテゴリを使ってすべてをやっているということです。あなたの継承ラインを解放しますが、カテゴリに変数を持てないのでObj-Cを本当に制限しています。とにかく、私はこれをあまりにも多く作っているかもしれないと思う: "ビジネス"アプリ、ブロッキング、同期呼び出しのためにおそらく大丈夫です。 –
バックグラウンドスレッドでUIView部分を作成するのは安全ですが、表示中のビューにそれらを添付しない限りは可能ですか? –