1. 程式人生 > >iOS替換方法hook

iOS替換方法hook

HOOK


+ (void)load
{
    SEL origSel = @selector(viewDidAppear:);
    SEL swizSel = @selector(swiz_viewDidAppear:);
    [UIViewController swizzleMethods:[self class] originalSelector:origSel swizzledSelector:swizSel];
}

+ (void)swizzleMethods:(Class)class originalSelector:(SEL)origSel swizzledSelector:(SEL)swizSel
{
    Method origMethod = class_getInstanceMethod(class, origSel);
    Method swizMethod = class_getInstanceMethod(class, swizSel);
     
    //class_addMethod will fail if original method already exists
    BOOL didAddMethod = class_addMethod(class, origSel, method_getImplementation(swizMethod), method_getTypeEncoding(swizMethod));
    if (didAddMethod) {
        class_replaceMethod(class, swizSel, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));
    } else {
        //origMethod and swizMethod already exist
        method_exchangeImplementations(origMethod, swizMethod);
    }
}

- (void)swiz_viewDidAppear:(BOOL)animated
{
    //此處注入程式碼
    //………..

   
    [self swiz_viewDidAppear:animated];
}

相關推薦

iOS替換方法hook

HOOK + (void)load {     SEL origSel = @selector(viewDidAppear:);     SEL swizSel = @selector(swiz_v

iOS App 無程式碼入侵的方法hook

繼續Objective-C runtime的研究 最近公司專案在做使用者行為分析 於是App端在某些頁面切換,互動操作的時候需要給統計系統傳送一條訊息 在幾十個Controller 的專案裡,一個一個地加程式碼那完全是不可能的,維護起來也是吃力 但這裡需要處理的是 Controller, 可以有以下方式實現上

iOS UIFont字型大小適配,利用類別寫簡單的runtime替換方法

通常我們不做字型大小的適配,但有時候需求要你在不同尺寸螢幕上顯示合適的字型大小,如果你用的系統字型大小方法systemFontOfSize:,那麼可以寫一個類別,然後什麼都不用做,自動替換所有字型大小。 當然,此方法也適合替換其他方法,比如替換imageNamed:,可參考

iOS 各種方法

eof des mas read pdo lds csg skin lex tableViewCell分割線左對齊: - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *

無序列表前小黑點圖片替換方法

png 替換方法 doc rep posit alt -i ges -1 無須列表前小黑點圖片替換方法: 直接上代碼: <!DOCTYPE html> <html lang="zh"> <head> <m

js的字符串替換方法String.format

new regexp orm length string 字符 mar lac ret 簡單的一個string.format的方法去替換字符串 String.format = function () { if (arguments.length == 0) return n

C# 運行時替換方法(需要unsafe編譯)

version log aes reflect erl dha ram ins text 第一種方法的基本原理是將函數指針替換成想要的方法(https://stackoverflow.com/questions/7299097/dynamically-replace-the

String類的替換方法(9)

ret cas pla case trim compare repl ron char 1:String replace(char old,char new) 2: String replace(String old,String new) 3: trim();//

小程序加載圖片失敗,默認圖片的替換方法

默認 替換方法 shadow url 返回 字段 list url地址 dex 需求前端請求後臺的接口的時候回,數據會返回圖片的url地址,但是有的時候可能是數據字段的錯誤,或者是返回的鏈接中信息是404,那麽前端這邊怎麽處理。 大致思路:我們會在data數據中得到一個l

iOS presentViewController 方法引起的問題

roo gin 顯示 dap 直接 class 界面 彈出 刪除 有個需求,在項目中隨時使用 presentViewController來顯示一個界面,比如彈窗提示或者人臉解鎖,都是在任何情況都可能出現的。 在presentViewController 調用前,已經有提示框

python sub替換方法

命令:re.sub(pattern, repl, string, count=0, flags=0) re.sub 用於替換字串的匹配項。如果沒有匹配到規則,則原字串不變。 第一個引數:規則 第二個引數:替換後的字串 第三個引數:字串 第四個引數:替換個數。預設為0,表示每個匹配項都替換=======

通過 Mach-O 檔案動態分析進行 iOS load 方法耗時檢測

背景 目前部分產品反饋啟動時間還是較慢。但目前啟動時間耗時統計方案無法統計到 main 方法之前的 load 方法耗時,無法定位耗時長的元件程式碼。 第三方方案:Hook所有+load方法(包括Category) 該方案通過 Hook 所有 Class 中的 load 方法的方式實現了 load 方法的

iOS常用方法——一個好用的獲取導航欄高度和Tabbar高度的分類

開發中經常需要知道導航欄(系統)的高度和Tabbar的高度,一般是用來計算在ViewController中的位置和高度,我們可以寫一個UIVIewController的分類,這樣在呼叫的時候就很方便。程式碼如下: #import "UIViewController+MYViewCon

iOS常用方法——UIWebView全屏顯示的實現

專案中載入webView,導航欄由web端做的話,客戶端就需要隱藏掉導航欄。這個時候顯示出來的頁面,在頂部會出現狀態列為空白的問題。底部也會多出空白,即: - (void)viewDidLoad { [super viewDidLoad]; // Do any add

WebMvcConfigurerAdapter過時的替換方法

Spring 5.0後,WebMvcConfigurerAdapter被廢棄,取代的方法有兩種: ①implements WebMvcConfigurer(官方推薦) ②extends WebMvcConfigurationSupport 使用第一種方法是實現了一個介面

js陣列剪下刪除拼接替換方法彙總

1.concat concat()方法可以基於當前陣列中的所有項建立一個新的陣列,具體來說,這個方法會先建立愛你當前陣列的一個副本,然後將接受到的引數新增到副本的末尾,最後返回新構建的陣列。在沒有給concat()傳遞引數的情況下,它只複製當前陣列並返回副本。 2.slice sli

iOS description 方法 引發的所學的大學計算機知識

1、一般情況下,我們在使用NSLog 和 %@ 輸出某個物件時,就會呼叫這個物件的 description 方法,它的返回值就是 NSString 字串型別,所以 description 預設實現返回的格式是 <類名: 物件的記憶體地址> 2、幾種空指標的說明 ● nil

iOS-工廠方法模式的運用

原文釋出在個人簡書,更多內容歡迎關注筆者簡書 ,評論、互相交流請到簡書,謝謝! 設計模式這個高大上的詞似乎每天都在聽。設計模式在服務端設計時體現的比較明顯。雖然移動端設計模式沒有服務端那麼明顯,但是做為移動端開發人員掌握各種設計模式的思想有助於提高程式碼質量。

iOS 標記方法或屬性過期

@property(nonatomic, copy)NSString *gdtype __attribute__((deprecated("已過期, 用goodsclassifytype替換")));

React Native和iOS原生方法互動

原生傳遞引數給React Native 初始化時傳值 - (instancetype)initWithBundleURL:(NSURL *)bundleURL moduleName:(NSString *