iOS hook 乙個例項沒有實現的方法

2021-10-16 19:50:11 字數 1478 閱讀 3438

情形:我們需要hook tableview的**物件 

(void)tableview:(uitableview *)tableview willdisplaycell:(uitableviewcell *)cell forrowatindexpath:(nsindexpath *)indexpath  方法,在執行該方法的時候做一下操作,

但是,如果tableview的**物件並沒有實現該方法,我們該怎麼辦呢? 方案就是,我們在工具類中判斷一下,如果**物件沒有實現該方法

我們就給**物件新增乙個實現,這樣我們就可以hook 這個方法,然後在適當時機做我們想要實現的操作,這裡,我們可以將我們自己做的乙個方法實現

模擬做「引子」,他就是起到了乙個「引子」的作用,並沒有具體的實現,但是沒有他又不行 ,這裡工具類中的 + (void)tableview:(uitableview *)tableview willdisplaycell:(uitableviewcell *)cell forrowatindexpath:(nsindexpath *)indexpath方法就是「引子」

+ (void)hookwilldisplaycellwithpresenter:(nsobject *)presenter

uitableview *tableview = data.arguments.firstobject;

uitableviewcell *cell = data.arguments[1];

if (![tableview iskindofclass:[uitableview class]] ||

![cell iskindofclass:[uitableviewcell class]])

[tableview bringsubviewtofront:cell];

} error:nil];

}

上面是hook方法的實現,下面是判斷有沒有實現,如果沒有實現,將自己的乙個方法新增到該物件上,作為引子

+ (void)tableview:(uitableview *)tableview willdisplaycell:(uitableviewcell *)cell forrowatindexpath:(nsindexpath *)indexpath

nsobject *presenter = scrollview.delegate;

if ([presenter respondstoselector:@selector(tableview:willdisplaycell:forrowatindexpath:)]) else

}}

注意,這三段**都是在同乙個類中實現的,最下面的一段**也是在乙個類方法中,這裡是在乙個類方法中hook presenter的 乙個可能沒有實現的方法,如果沒有實現,

該類就幫他實現,從而在適當的時機觸發present的被hook的方法,達到我們捕捉時機的目的 

C 實現只許乙個例項執行

using system using system.windows.forms using system.runtime.interopservices using system.diagnostics namespace tst.single else dllimport user32.dll p...

乙個沒有 的for迴圈

如果for迴圈沒有 那麼該for迴圈預設對第一條語句進行迴圈,以 結尾就結束了。這個語法同樣適用於if while迴圈。例如下面這個例子 public class fordemo int s 0 for int i 0 i myintarray.length i if i 2 1 s myintar...

沒有物件?new乙個!

我們都知道,使用new後可返回乙個物件,通常用於例項化乙個 類 用法 function student name,age student.prototype.sayname function const person new student 小明 person.sayname i am 小明首先我們...