4

我目前正在将一个使用 ASIHTTPRequest 和 SBJson 的项目迁移到 RestKit。

之前的实现是使用 NSOperation 发出 HTTP 请求、解析 JSON 对象并对 Core Data API 进行必要的调用。

我已将其重新考虑如下:

@implementation UpdateBeers

#pragma mark - NSOperation

- (void)main {
    [[RKClient sharedClient] get:@"/beers" delegate:self]; 
}

- (void)request:(RKRequest*)request didLoadResponse:(RKResponse*)response {  
    debug(@"didLoadResponse");
}  

- (void)request:(RKRequest *)request didFailLoadWithError:(NSError *)error {
    debug(@"%@", error);
}

#pragma mark - Memory

- (void) dealloc {
    [super dealloc];
}

@end

日志中出现以下内容

向 URL http://localhost:9091/api/test发送 GET 请求。HTTP 正文:

问题是服务器永远不会收到请求。

添加以下行:

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.3]];

到最后主要方法解决了这个问题。

我的问题是:

我应该将 ResKit API 调用作为 NSOperation 执行吗?如果不是,我在后台进行调用的替代方法是什么?

提前致谢。

4

1 回答 1

6

也许我没有完全理解这里的整体问题...... RestKit 关于从网络加载资源所做的一切都已经在后台了。几乎所有东西都已经是异步的,因此在 NSOperation 中运行现有的异步 RestKit 方法是重复的并且适得其反。话虽如此,一旦 RestKit 告诉您它已完成下载数据 (didLoadResponse),如果该部分计算密集且与 UI 无关,您可能希望在 NSOperation 中进行任何后续后处理。否则,不要试图超越 RestKit,只需像示例中那样运行它,你就可以使用异步的优点了。

此外,如果您计划同时触发多个请求,您可能需要考虑使用 RestKit 的请求队列。它仍然会异步下载所有内容,但它一次只会运行你告诉它的请求数......当我的应用程序更新时,一次发送大约七个请求,但队列将连续运行它们而不是并行,从而防止任何网络带宽问题

于 2011-07-17T19:23:47.520 回答