douban-objc-client是一个ObjectiveC实现的豆瓣API客户端。现在仅支持iOS。
1.提供OAuth2所需参数DOUService *service = [DOUService sharedInstance];service.clientId = kAPIKey;service.clientSecret = kPrivateKey;2.发起一个异步请求NSString *subPath = [NSString stringWithFormat:@"/book/subject/%d", bookId];DOUQuery *query = [[[DOUQuery alloc] initWithSubPath:subPath parameters:nil] autorelease];query.apiBaseUrlString = service.apiBaseUrlString;DOUHttpRequest *req = [DOUHttpRequest requestWithQuery:query target:self];DOUService *service = [DOUService sharedInstance];[service addRequest:req];若使用delegate方式处理回调,要注意一个问题,某些情况下,request的delegate被dealloc后,request才得到了返回。这时就是一个已释放的delegate来处理回调。这会造成程序崩溃。处理方法为,在request的delegate(例如某个UIViewController)的dealloc方法中对request发送clearDelegatesAndCancel消息,再releaserequest。
另外一个更为优雅的方法是使用“闭包”(block),DOUHttpRequest提供了一个方法,可以用闭包来处理回调。由于request会自动retain闭包。所以,这就避免了使用delegate处理回调时可能出现的上述问题。
但,Objective-C的闭包在iOS4.0及其以上版本才得到支持。
DOUHttpRequest的闭包处理回调的方法:
+ (DOUHttpRequest *)requestWithQuery:(DOUQuery *)query completionBlock:(DOUBasicBlock)completionHandler;3.异步请求的回调- (void)requestFinished:(DOUHttpRequest *)req { NSError *error = [req error]; if (!error) { DoubanFeedEvent *feed = [[DoubanFeedEvent alloc] initWithData:[req responseData]]; }}- (void)requestFailed:(DOUHttpRequest *)req { NSLog(@"error");}
评论