Запуск блока какао во вторичном потоке - PullRequest
1 голос
/ 16 марта 2012

У меня звонок на сервер.Я хочу, чтобы обратный вызов здесь выполнялся асинхронно во вторичном потоке, который не является потоком пользовательского интерфейса.Основные данные здесь зависают, и я хотел бы попытаться сделать приложение более отзывчивым.Каков наилучший способ запустить этот обратный вызов во вторичном потоке?Пример кода был бы великолепен!

[[SomeServer sharedInstance] doServerCallCallback:^(NSObject *param) {   

    NSManagedObjectContext *moc = [MYAPPDELEGATE managedObjectContext];

    /* do more stuff with param */

    [MYAPPDELEGATE saveManagedObjectContext];
}];

Сам серверный вызов не обязательно должен быть во вторичном потоке, однако код, выполняемый в блоке, должен быть.

Ответы [ 2 ]

1 голос
/ 16 марта 2012

Поместить некоторую работу в фоновый поток очень просто: запустите ваш блок с помощью dispatch_async(), -[NSOperationQueue addOperationWithBlock:] или, возможно, даже чего-то, связанного с подключением к серверу, которое вы используете, например +[NSURLConnection sendAsynchronousRequest:queue:completionHandler:].(Посмотрите любой из этих документов в примерах использования.)

Если вы ищете занятие Core Data в фоновом потоке, это будет неприятно, если вы не используете iOS 5.0 или новее.У Apple есть большая рецензия на Concurrency и Core Data для случая до 5.0, но новый материал, который намного проще для простых применений, как вы предлагаете, не так хорошо документирован. Этот вопрос должен дать вам хорошее начало.

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

Блок, который вы передаете, является объектом, который сервер будет выполнять в определенный момент. Если вы хотите, чтобы блок выполнялся в другом потоке, вам нужно изменить реализацию SomeServer на -doServerCallCallback:.

См. Руководство Grand Central Dispatch для получения полной информации об использовании блоков. Короче говоря, сервер должен создать очередь отправки при запуске. Затем вы можете использовать функцию типа dispatch_async() для выполнения блока.

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