情形:我們需要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 小明首先我們...