在前面的部落格中提到了block的概念和使用方法,個人感覺block最爽的用法莫過于在回調時用block。感覺比委托回調和目标方法回調用着要順手,好不好用還得讀者親自用一下才知道。如果 讀者之前用過ssh架構的話,看到oc中的block回調,會感覺非常的親切,和java中的接口回調像極了。還是那句話,上些block的回調代碼最為直接。下面的demo是根據筆者的了解,自己設計的一個小小的block回調的 demo,難免會有不足之處,還望批評指正,尊重原創,轉載請注明出處。
為了實作我們的block回調,我們需要模拟一個元件(component)和一個控制器(controller)。在component中我們隻給出代碼塊的聲明,不進行實作,然後在controller中進行實作,在component中進行調用,也就是說由元件提供代碼塊的形式和代碼塊的參數,在controller中給出業務邏輯。可能有的小夥伴看完上面的功能描述多少會有些抽象,廢話少說,代碼 走起!
1.為了更好的了解,我們就先寫元件的接口部分,接口部分需要給出代碼塊的定義和聲明,然後再提供一個外部代碼塊的入口函數,相當于前面目标方法回調的注冊方法,再提供一個執行代碼塊的方法,元件的接口如下:
2.元件的@interface寫完我們就開始編寫元件的實作部分了,元件的實作部分也挺簡單的,就是實作我們在接口中聲明的方法,我們在set方法中給block指派,在runblock中進行代碼塊的調用,元件中代碼塊是調用控制器中的代碼塊,是以稱為代碼塊的回調,代碼如下
3.元件寫完以後我們就開始寫我們的controller方法,下面的代碼是控制器中的接口部分代碼,接口部分隻聲明了控制器啟動的方法,代碼如下:
4.控制器的實作部分是控制器的核心部分,為了實作元件的封裝,我們用延展來隐藏我們元件要用到的方法,在延展中聲明了我們要使用的元件,然後再實作部分進行元件的初始化和編寫元件中要調用的代碼塊,代碼塊中的參數由元件提供,而控制器隻提供業務邏輯控制,在控制器中我們需要 啟動我們要使用的元件,也就是元件中的runblock方法。代碼如下:
5.block回調的測試:在mian函數中進行控制器的執行個體化和啟動控制器,代碼如下:
代碼運作結果如下:
以上是block回調的小demo,讀者可以和前面部落格中的委托回調和目标方法回調進行一個對比,具體哪一個好用,就看讀者個人所好了。block是後來蘋果公司對oc的擴充,就像php5.3以後也支援閉包了一樣,在之前封裝的元件都是用目标方法回調或委托回調實作的,至于block回調好在哪,還得親自使用一下才知道啊。
上面的總結暫且這麼說吧,是根據筆者自己的了解所總結的内容,不免有偏頗之處,歡迎批評指正。