mac TeamTalk開發點點滴滴之二——block和DDLogic的有機結合 - 刀哥的技術隨筆

由于TT原班人馬離職,文章丟失,暫留備份

轉載地址http://www.tuicool.com/articles/ymUbaaA

隊長、大隊長都不在加上今天又比較空,偷偷的繼續寫mac TT開發點點滴滴的blog,一般人我不告訴他~~_

在開始本博文之前先翻出一個老概念——閉包(closure),相信同學們都聽過用過并且有自己的理解,在各種開發語言中(JavaScript、c++,oc、lua等 )都能找到對閉包不同程度的支持。oc中的閉包是用block實現的c++ 11中的閉包可以用lambda表達式來實現。ps:同學們可以膜拜下這篇文章—— http://coolshell.cn/articles/8309.html

DDLogic框架(系列博文第一部分講解內容)有個任務執行池里面裝的是一個個等待執行的task,第一個版本是這樣push一個任務的:

-(BOOL) pushTask:(id<DDTaskProtocol>)task delegate:(id<DDTaskDelegate>) delegate;

調用方例子:

  • 1.先要創建一個task執行類:
@interface DDTestTask : NSObject<DDTaskProtocol>

-(void) execute;

@end
  • 2.調用的地方需要創建實例,然后pushTask進去
DDTestTask * task = [[DDTestTask alloc] init];

[[DDLogic instance] pushTask:task delegate:nil];

曾近用c++ 98也寫過類似的機制和mac端的第一版本是類似的:也貼個示例代碼吧(番茄雞蛋莫要砸過來哦,我不是沒營養的貼碼一族~~):

/**
 * 發起一個Task到任務隊列中(放入容器的task對象實例不需要自己釋放)
 *
 * @param ITask * pTask
 * @return void
 */
virtual LogicErrorCode pushTask(IN ITask* pTask) = 0;

調用方的例子也是類似的:

  • 1.先創建一個task執行類:
class TestTask : public logic::ITask
{
public: 
    virtual void execute();
    virtual void release();
}  
  • 2.調用的地方需要創建實例,然后pushTask進去
TestTask* pTask = new TestTask();

logic::GetLogic()->pushTask(pTask);

回頭看看是不是略蛋疼呢?為了執行一段execute()的任務代碼,需要額外做腫么多事情:

  • 1 定義一個類文件來編寫task執行的任務類
  • 2 在pushtask的地方要實例化這個task類
  • 3 c++中執行完任務后還要記得釋放任務對象資源。那么有沒有更好的方法來簡化這些重復的工作量呢,答案是肯定!

c++、oc語言都有相應的解決方案。oc用block,c++ 11用lambda都可以完美的解決。 同樣我貼段代碼吧,DDLogic框架的task v2:

typedef void(^TaskBlock)();
-(BOOL) pushTaskWithBlock:(TaskBlock)taskBlock;

調用方例子:
    [[DDLogic instance] pushTaskWithBlock:
       ^
       {
         //讓task 跑一會兒...
       }];
c++ 11 用lambda表達式做法也類似,如下:
void pushTaskWithLambda(std::function<void ()> taskRun)
{
    taskRun();
 }

調用方的例子:
logic::GetLogic()->pushTaskWithLambda(
  []()
  {
    //讓task 跑一會兒...
  }
 );

——————————————————————————————————————————————————

以上通過直接把任務執行代碼和pushTask調用的地方放在一起,是不是感覺讓你的重復代碼量、文件數倍減呢?oc block、c++ lambda的用法還可以有很多,比如oc block可以作為callback可以把你的整個程序流程封裝在一個塊里面,作為delegate也可以把流程封裝在一個塊里面,
舉個AFNetworking使用的例子:

 -(void)requestWithUri:(NSString *)uri params:(NSDictionary *)params method:(NSString *)method success:(SuccessBlock)success failure:(FailureBlock)failure
{
  // success block
  void (^responseSuccess)(AFHTTPRequestOperation*, id) =         ^(AFHTTPRequestOperation *operation, id responseObject)
  {
 //http成功的callback block        
  };

  // failure block
  void (^failureResponse)(AFHTTPRequestOperation *, NSError *) = ^(AFHTTPRequestOperation *operation, NSError *error)
  {
 //http失敗的 callback block
  };

  AFHTTPRequestOperation *operation = [_httpClient HTTPRequestOperationWithRequest:request success: responseSuccess failure:failureResponse ];
  [_httpClient enqueueHTTPRequestOperation:operation];
}

關于block的用法完整用法,同學們可以看下這個篇博文( http://blog.csdn.net/jy578154186_/article/details/8664129 )講的蠻詳細的~~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容

  • 由于TT原班人馬離職,文章丟失,暫留備份 轉載地址 mac TeamTalk開發點點滴滴之一——DDLogic框架...
    kakukeme閱讀 1,883評論 0 51
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,199評論 30 471
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,179評論 4 61
  • 再一次夜渡迷津, 聽見那塵世間花開的獨吟, 仿佛是裂帛的聲音, 然后浮沉起執著的心, 直到生命殆盡。
    姑射閱讀 326評論 0 2
  • 遇見你時 你是藍色的 喜怒哀懼愛惡欲 有火焰的微藍 在流轉中變換顏色
    K君決心過新的生活閱讀 118評論 0 1