Использование блоков в Restkit (например, блоки Asihttprequest)
Вопрос
Я широко использую поддержку блоков в Asihttprequest, и я обнаружил, что это чрезвычайно элегантный способ кодирования асинхронных запросов, гораздо больше, чем если делегат перезванивает отдельную функцию
Вот пример кода для быстрой ссылки.
__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setCompletionBlock:^{
NSString *responseString = [request responseString];
}];
[request startAsynchronous];
Я хотел бы начать использовать Restkit, но я должен иметь возможность использовать Restkit и с блоками.
Я видел обертку здесь RESTKIT Block Wabper, но хотел бы проверить, будет ли эта обертка хорошо работать в производстве, и если кто -нибудь широко использовал ее раньше
Решение
Я еще не использовал обертку Restkit Block, но вскоре буду. Я на самом деле удаляю Asihttprequest из своего приложения и заменяю Restkit. Не потому, что это плохо, Asihttp* довольно стабилен - но это не развивается. В то время как многие другие библиотеки, такие как Restkit, обертывают NSURLConnection и, таким образом, пожинают преимущества яблок, продолжающих усовершенствовать его, ASIHTTP* использует CFNetWork. Apple не вкладывает большие усилия в улучшение ранее существовавших классов основного фундамента (например, CFNetWork). Кроме того, поскольку ASIHTTP* зависит от CF, это будет Королевская боль мигрировать в дугу, когда она доступна; Я не буду преимуществами дуги как можно скорее.
Другие советы
Поддержка блоков для всех основных задач делегата на rkrequest и rkobjectloader будет появиться в 0.9.4
Вчера Блейк выпустил Версон 0.9.3 Что показывает использование блоков для Mapper Object (другие методы уже были готовы к блокам). Вы должны взглянуть на новые функции.
Для быстрого примера кода для использования Restkit с блоками я получил этот фрагмент из http://kalapun.com/blog/2012/05/17/how-irestkit/
[[RKClient sharedClient] get:@"/fooBar" usingBlock:^(RKRequest *request) {
request.onDidLoadResponse = ^(RKResponse *response) {
NSLog(@"Retrieved XML: %@", [response bodyAsString]);
};
}];