Обратный вызов для делегирования с использованием основного потока, а не вторичного потока? - PullRequest
1 голос
/ 19 января 2010

Я определил класс под названием «AsyncNetworkOperation», подкласс NSOperation, используемый для выполнения запросов к базе данных в моем приложении. Мой класс AsyncNetworkOperation имеет протокол, который будет использоваться объектами, которые инициируют AsyncNetworkOperation:

@protocol AsyncNetworkOperationDelegate
@optional - (void)operationAboutToFinish;
@required - (void)operationFinishedWithData:(id)retrievedData;
@required - (void)operationFinishedWithError:(NSError*)error;
@end

Это все работает нормально, за исключением случая, когда делегат, которому я перезваниваю, хочет показать UIAlertView, запустить NSTimer или сделать что-то еще, что вторичные потоки либо не должны делать, либо требуют дополнительных усилий делать.

Итак, вот мой вопрос: когда я перезваниваю делегату, должен ли я сделать это через - [NSObject executeSelectorOnMainThread:]? Казалось бы, при этом я освобождаю своего делегата от необходимости знать, вызывается ли он через вторичный или первичный поток, что позволяет ему реализовывать функциональные возможности самым простым способом без каких-либо ограничений.

Просто интересуюсь стандартным способом решения этой проблемы.

Спасибо.

1 Ответ

0 голосов
/ 19 января 2010

Я бы рекомендовал, чтобы AsyncNetworkOperation вызывал объект делегата в том же потоке, в котором он был вызван. Поэтому, если асинхронная операция была впервые вызвана в главном потоке, она должна вызвать делегат в главном потоке!

Вы можете вообразить будущее использование, когда делегату не нужно обновлять интерфейс, и вызов его из вторичного потока был бы хорош.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...