Управление делегатами с GCD на iOS 5, как это сделать? - PullRequest
0 голосов
/ 03 марта 2012

У меня есть объект, у которого есть метод, который возвращает результаты через метод делегата, пару секунд спустя.Я понимаю, что если я сделаю это в другом потоке с помощью GCD, я смогу улучшить производительность своего пользовательского интерфейса, но как насчет метода делегата, который реализован на объекте, который выполняется в главном потоке?

Так что все это происходит восновной поток:

В файле заголовка:

@interface MyViewController : UIViewController <ThisRespondsToSomeDelegate>

В файле реализации контроллера представления:

SomeObject _myDealer; // INSTANCE VARIABLE OF THE OBJECT THAT IMPLEMENTS THE ThisRespondsToSomeDelegate TYPE

Позже тот же файл реализации:

[_myDealer getSomeData];

И позже, метод делегата:

-(void)myDealerReturnedSomeData:data anotherArg:(id)somemoredata {...};

Из того, что я понимаю, я создаю объект * background_queue * с методом * dispatch_queue_create * и затем использую:

dispatch_async(backgroundQueue, ^(void) { [_myDealer getSomeData]; });

Но как мне вернуться к методу делегата в главном потоке?Как myDealerReturnedSomeData: данные вызываются?

Спасибо!

Удачного кодирования!

1 Ответ

0 голосов
/ 03 марта 2012

Чтобы вызвать метод в главном потоке после завершения фоновой задачи GCD, просто отправьте его в блоке в главную очередь после того, как ваша фоновая задача завершит выполнение:

...