<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          douban-objc-clientObjective C 實(shí)現(xiàn)的 豆瓣 API 客戶端

          聯(lián)合創(chuàng)作 · 2023-09-19 07:10

          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");
          }
          瀏覽 24
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  美国黄色电影AA | 男女猛干直接看 | 国产精品无码午夜福利 | 亚洲高清视频日本高清视频 | 大雞巴弄得我好舒服黃片 |