douban-objc-clientObjective C 實(shí)現(xiàn)的 豆瓣 API 客戶端
douban-objc-client 是一個(gè) Objective C 實(shí)現(xiàn)的 豆瓣 API 客戶端?,F(xiàn)在僅支持 iOS。
1.提供 OAuth2 所需參數(shù)
DOUService *service = [DOUService sharedInstance]; service.clientId = kAPIKey; service.clientSecret = kPrivateKey;
2.發(fā)起一個(gè)異步請(qǐng)求
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 方式處理回調(diào),要注意一個(gè)問題,某些情況下,request 的 delegate 被 dealloc 后,request 才得到了返回。這時(shí)就是一個(gè) 已釋放的 delegate 來處理回調(diào)。 這會(huì)造成程序崩潰。處理方法為,在 request 的 delegate (例如某個(gè) UIViewController) 的 dealloc 方法中對(duì) request 發(fā)送 clearDelegatesAndCancel 消息,再 release request。
另外一個(gè)更為優(yōu)雅的方法是使用“閉包” (block),DOUHttpRequest 提供了一個(gè)方法,可以用閉包來處理回調(diào)。由于 request 會(huì)自動(dòng) retain 閉包。所以,這就避免了使用 delegate 處理回調(diào)時(shí)可能出現(xiàn)的上述問題。
但, Objective-C 的閉包在 iOS 4.0 及其以上版本才得到支持。
DOUHttpRequest 的閉包處理回調(diào)的方法:
+ (DOUHttpRequest *)requestWithQuery:(DOUQuery *)query completionBlock:(DOUBasicBlock)completionHandler;
3.異步請(qǐng)求的回調(diào)
- (void)requestFinished:(DOUHttpRequest *)req {
NSError *error = [req error];
if (!error) {
DoubanFeedEvent *feed = [[DoubanFeedEvent alloc] initWithData:[req responseData]];
}
}
- (void)requestFailed:(DOUHttpRequest *)req {
NSLog(@"error");
}評(píng)論
圖片
表情
