第一種方式就是業務**與統計**相分離,利用runtime的特性,具體操作如下
定義工具類
@inte***ce
whookutility :
nsobject
+ (void
)swizzlinginclass:(class)cls originalselector:(
sel)originalselector swizzledselector:(
sel)swizzledselector;
@end
#import
+ (void
)swizzlinginclass:(class)cls originalselector:(
sel)originalselector swizzledselector:(
sel)swizzledselector
else }
對於以上的函式需要有以下說明:
1 上面的函式主要作用就是交換兩個方法的實現,主要的三句**是:
method
originalmethod =
class_getinstancemethod
(class, originalselector);
method
swizzledmethod =
class_getinstancemethod
(class, swizzledselector);
method_exchangeimplementations
(originalmethod, swizzledmethod);
讓我舉個栗子��:比如你需要統計乙個viewcontroller的生命週期開始和結束,那一搬情況下是不是需要在它的
如果在每個頁面裡面都這樣寫,那麼統計這一塊的**耦合很高,這樣很不好。現在有乙個解決方法,利用runtime特性hook住
的demo。
2 除了函式的主要作用的三句**那class_addmethod
class_replacemethod 的作用是什麼呢
假如你hook的函式並不存在比如隨意乙個函式viewwillshow 那麼這兩句**就稍微有點有作用了,至少你在你hook的
那個類裡面執行[self
performselector:@selector(viewwillshow) withobject:nil]不會崩潰。
(前提是你已經定義好了交換的函式哦)。總的來說只要你不莫名其妙的寫出hook不存在的函式,這兩個函式是沒用的。
即使hook了不存在的函式也不會崩潰的。如果你發現這兩句**還有其它的作用,可以交流一下~
現在我們來使用一下以上的類
建乙個基於uiviewcontroller的類別
#import
"uiviewcontroller+userstatics.h"
#import
"whookutility.h"
@implementation
uiviewcontroller (userstatics)
+ (void
)load ); }
#pragma mark - method swizzling
bool
bool
)animated 是我自己在類別裡面定義的函式,
bool
bool
)animated
裡面有句** [
self
- (void
bool
)animated
- (void
bool
)animated
#import
"uicontrol+userstatics.h"
#import
"whookutility.h"
@implementation
uicontrol (userstatics)
+ (void
)load ); }
#pragma mark - method swizzling
- (void
)swiz_sendaction:(
sel)action to:(
id)target forevent:(
uievent
*)event;
- (void
)performuserstastisticsaction:(
sel)action to:(
id)target forevent:(
uievent
*)event;
但是這種方法有乙個突出的問題解決不了:無法交換**函式
你如果想要監聽webview的**函式,tableview的**函式那就無法用這種方法了。
CSS 埋點統計
html head lang en meta charset utf 8 meta name viewport content width device width,initial scale 1,minimum scale 1,maximum scale 1,user scalable no ti...
埋點 什麼是埋點?埋點的實現方式?
資料產生 資料採集 資料處理 資料分析 資料探勘 產品優化 針對特定使用者行為或事件進行捕獲 處理和傳送的相關技術及其實施過程。用來跟蹤使用者使用狀況和優化產品。技術實質 監聽軟體執行中的事件,當需要關注的事件發生時,進行判斷和捕獲。注意 明確事件發生的時間點 判別條件。埋點原則 1 獲取目標資料 ...
百度 Google 埋點統計(Vue篇)
var hmt hmt window.hmt hmt 必須把 hmt掛載到window下,否則找不到 function router.beforeeach to,from next next 注意事項 易出現的錯誤 頁面 安裝狀態 未生效 檢查一下頁面 中是否包含以下 需要去掉 去除掉 referr...