iOS開發Runtime 方法替換

来源:https://www.cnblogs.com/guozhihe/archive/2020/05/21/12931301.html
-Advertisement-
Play Games

通過#import <objc/runtime.h>我們可以找到: 1 /** 2 * Returns a specified instance method for a given class. 3 * 4 * @param cls The class you want to inspect. 5 ...


通過#import <objc/runtime.h>我們可以找到:

 1 /** 
 2  * Returns a specified instance method for a given class.
 3  * 
 4  * @param cls The class you want to inspect.
 5  * @param name The selector of the method you want to retrieve.
 6  * 
 7  * @return The method that corresponds to the implementation of the selector specified by 
 8  *  \e name for the class specified by \e cls, or \c NULL if the specified class or its 
 9  *  superclasses do not contain an instance method with the specified selector.
10  *
11  * @note This function searches superclasses for implementations, whereas \c class_copyMethodList does not.
12  */
13 OBJC_EXPORT Method _Nullable
14 class_getInstanceMethod(Class _Nullable cls, SEL _Nonnull name)
15     OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0);
class_getInstanceMethod這個可以獲取類的實例方法

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface RuntimeObjc : NSObject


-(void)runEg;
-(void)otherRunEg;

@end

 

#import "RuntimeObjc.h"
#import <objc/runtime.h>

@implementation RuntimeObjc

+(void)load{
    
    Method runEg = class_getInstanceMethod(self, @selector(runEg));
    Method otherRunEg = class_getInstanceMethod(self, @selector(otherRunEg));
  //交換 method_exchangeImplementations(runEg, otherRunEg); } -(void)runEg{ NSLog(@"runEg"); } -(void)otherRunEg{
  NSLog(@"otherRunEg");
  [self otherRunEg];//已經做了置換 故調用的runEg
   
}
@end

調用

    RuntimeObjc * objc = [[RuntimeObjc alloc]init];
    [objc runEg];

 列印:

2020-05-21 15:42:43.416766+0800 11111[35733:176260] otherRunEg
2020-05-21 15:42:43.416928+0800 11111[35733:176260] runEg

 





 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 SQL優化之SQL 進階技巧(上) SQL優化之SQL 進階技巧(下)中提到使用以下 sql 會導致慢查詢 SELECT COUNT( ) FROM SomeTable SELECT COUNT(1) FROM SomeTable 原因是會造成全表掃描,有位讀者說這種說法是有問題的,實際上針對 ...
  • ​ ​ 在《 "什麼的是用戶畫像" 》一文中,我們已經知道用戶畫像對於企業的巨大意義,當然也有著非常大實時難度。那麼在用戶畫像的系統架構中都有哪些難度和重點要考慮的問題呢? 挑戰 大數據 隨著互聯網的崛起和智能手機的興起,以及物聯網帶來的各種可穿戴設備,我們能獲取的每一個用戶的數據量是非常巨大的,而 ...
  • 上文( SQL優化之SQL 進階技巧(上) )我們簡述了 SQL 的一些進階技巧,一些朋友覺得不過癮,我們繼續來下篇,再送你 10 個技巧 一、 使用延遲查詢優化 limit [offset], [rows] 經常出現類似以下的 SQL 語句: SELECT FROM film LIMIT 1000 ...
  • 由於工作需要,最近做了很多 BI 取數的工作,需要用到一些比較高級的 SQL 技巧,總結了一下工作中用到的一些比較騷的進階技巧,特此記錄一下,以方便自己查閱,主要目錄如下: SQL 的書寫規範 SQL 的一些進階使用技巧 SQL 的優化方法 SQL 的書寫規範 在介紹一些技巧之前,有必要強調一下規範 ...
  • https://blog.csdn.net/yiyele/article/details/80605909 一、生成數據表1、首先導入pandas庫,一般都會用到numpy庫,所以我們先導入備用:import numpy as npimport pandas as pd122、導入CSV或者xlsx ...
  • 準備工作 1.開啟伺服器 ··windows系統: 方法1.搜索服務,找到mysql並開啟. 方法2.如果安裝的是5.7版本,cmd中輸入: net start MySQL57 ··Mac系統: 系統偏好設置開啟mysql,然後命令行運行以下代碼出現base字樣即可: source .bash_pr ...
  • 新聞 1. "谷歌應用已全面支持Android和iOS的黑暗模式" 1. "谷歌Pixel 5確認無緣旗艦處理器而改用驍龍765G" 教程 1. "知識點 | ViewModel 四種集成方式" 1. "協程中的取消和異常 | 核心概念介紹" 1. "在 Android 上進行高刷新率渲染" 1. ...
  • 一套代碼達到以下效果: 打包不同applicationId能同時安裝在同一手機上 不同logo,app名稱, 不同第三方SDK接入配置(例如微信分享appid,激光推送appkey) 能區分debug和release配置 甚至不同的so文件,不同的依賴jar包 (待補充) 使用到的功能:produc ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...