Objective-C中的Block回撥模式

青玉伏案發表於2015-12-21

在前面的部落格中提到了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回撥好在哪,還得親自使用一下才知道啊。

上面的總結暫且這麼說吧,是根據筆者自己的理解所總結的內容,不免有偏頗之處,歡迎批評指正,轉載請註明出處。

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

Objective-C中的Block回撥模式

相關文章