バグがあり、UIの外観が破壊されたり、UI要素の一部が重複したり、サブビューに2回追加されたりしました。バグはほとんど再現されないため、修正するのは困難です。その理由を考えたのですが、おそらくUIを変更するメソッドが同時に2回呼び出されているのでしょう。そして私は正しかった、私はプログラムでバグを作成しようとした。
メソッドが異なるスレッドによって同時にアクセスされることによって引き起こされるバグがあります。この問題をエミュレートし、それをよりよく理解するため。以下に掲載されているコードを参照してください。
これを行うと、updatePresenceメソッドが呼び出され、プログラムは完全に機能します
ViewController.m
-(void)loadConversationScreen{
[conversationController updatePresence];
}
しかし、これを行うと、プログラムに問題が発生します
ViewController.m
-(void)loadConversationScreen{
[conversationController performSelectorInBackground:@selector(updatePresence) withObject:nil];
[conversationController updatePresence];
}
これは、メソッドが同時にアクセスされており、UIViewのインスタンスも同時にアクセス/変更されているためです。
2つのスレッドが同時にメソッドを使用するのを適切に停止するにはどうすればよいですか?
IOSでそれを適切に処理するにはどうすればよいですか(適切な方法がない場合、回避策は何ですか)、組み込みのロックまたは何かがありますか?
私のアプリはiOS4.0以降をサポートする必要があります
皆様のご協力に感謝いたします。