有個需求,統(tǒng)計(jì)一些界面的顯示時長,并且考慮鎖屏后臺等因素。 有了需求,那么我們需要的是下邊幾種情況?
1. 從viewDidAppear 到 viewDidDisappear
2. 從applicationDidBecomeActive 到applicationWillResignActive
繼承大法
一種方式是自定義一個UIViewController類,然后所有統(tǒng)計(jì)的界面viewController繼承此類,對于使用者來說,只需要繼承一下子而已,不需要做額外的工作。但是現(xiàn)在繼承帶來的問題也是令人詬病的,它增加代碼的閱讀和理解負(fù)擔(dān),間接會增加維護(hù)成本;而且為了增加一個功能,而在類體系中增加一個結(jié)點(diǎn)實(shí)在無甚必要。我們需要的是一個不需要侵入和改變我們的類體系的一個方案。
類別+閉包+信號流
從需求的分析中我們看到了,就是基于幾個事件點(diǎn)進(jìn)行處理一下而已,所以用事件流的方式來處理非常合適。在 ReactiveCocoa 中,我們只需要在幾個信號上加點(diǎn)代碼而已。另外,為了讓使用者使用方便,我們將此統(tǒng)計(jì)功能抽象為一個函數(shù),像下邊用例:
// 一個統(tǒng)計(jì)界面ViewController的viewDidLoad中代碼
[self staticDurationForCurrentViewControllerwithViewName:@"設(shè)置界面"];
上邊代碼就是統(tǒng)計(jì)一下當(dāng)前界面(設(shè)置界面)的顯示時長。這個方法的實(shí)現(xiàn)如下:
