別のオブジェクトのメソッドからインスタンス化された、バックグラウンドでタスクを実行するオブジェクトをスコープ内に保持するにはどうすればよいですか?
次の例を参照してください。オブジェクトAのdisplayメソッドは、オブジェクトBをインスタンス化し、そのdisplayメソッドを呼び出します。Bオブジェクトのdisplayメソッドが非同期タスクを開始すると、制御はA :: displayメソッドに戻ります。このメソッドは戻り、bObjectの割り当てが解除されます。bObjectのデータ/メソッドがバックグラウンドスレッドでアクセスされると、これは例外をスローします。
オブジェクトBのスコープを維持するための最良の方法は何ですか?オブジェクトBをAのメンバー変数として宣言できますが、これにより、オブジェクトAの存続期間全体のスコープが拡大します。
@implementation A
-(void) display
{
B* bObject = [[B alloc] init];
[bObject display];
}
@end
@implementation B
-(void) display
{
dispatch_async((dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0),{
self.data = 5;
---------
});
@end