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









评论