修改實例方法猎莲,增加新的實例方法

修改實例方法

import Foundation
import UIKit

class Demo:NSObject{
    dynamic func test(msg:String){
        print(msg)
    }
    
    class func test1(msg:String){
        print(msg)
    }
}
let sel = #selector(Demo.test(msg:))

/// 獲取test(msg:)的方法
let method:Method = class_getInstanceMethod(Demo.self, sel)
/// 獲取方法實現(xiàn)體的指針
let oldIMP:IMP = method_getImplementation(method)

// 把方法體指針轉(zhuǎn)成具體的block
typealias OldBlockType = @convention(c) (Demo,Selector,String)->Void


let oldBlock = unsafeBitCast(oldIMP, to: OldBlockType.self)

// 調(diào)用
//oldBlock(Demo(), sel, "調(diào)用方法。")

// 參數(shù)方法要把類名帶上技即,方法名不用帶著洼。帶了出錯。
let newBlock:@convention(block)(Demo,String)->Void = {(demo,msg) in
    print("before")
    oldBlock(demo, sel, msg)
    print("after")
}
let newIMP = imp_implementationWithBlock(unsafeBitCast(newBlock, to: AnyObject.self))

method_setImplementation(method, newIMP)

Demo().test(msg: "jjj")

//結(jié)果
/*
before
jjj
after
*/

增加新的實例方法


import Foundation
import UIKit


class Demo:NSObject{
    dynamic func test(msg:String){
        print(msg)
    }
    
    class func test1(msg:String){
        print(msg)
    }
}

//方法體
typealias NewBlock = @convention(block)(Demo,Selector,String)->Void
let block:NewBlock = { (demo,sel,msg) in
    print(msg)
}

//方法引用 IMP
let imp = imp_implementationWithBlock(unsafeBitCast(block, to: AnyObject.self))

//方法選擇器
let sel = Selector(("newFunc"))

//向類里增加方法
class_addMethod(Demo.self, sel, imp, "v@:")
//調(diào)用新的方法
Demo().perform(sel,with: "新增加了一個方法而叼。")

/*
 新增加了一個方法身笤。
 */
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市澈歉,隨后出現(xiàn)的幾起案子展鸡,更是在濱河造成了極大的恐慌,老刑警劉巖埃难,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件莹弊,死亡現(xiàn)場離奇詭異,居然都是意外死亡涡尘,警方通過查閱死者的電腦和手機忍弛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來考抄,“玉大人细疚,你說我怎么就攤上這事〈罚” “怎么了疯兼?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長贫途。 經(jīng)常有香客問我吧彪,道長,這世上最難降的妖魔是什么丢早? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任姨裸,我火速辦了婚禮,結(jié)果婚禮上怨酝,老公的妹妹穿的比我還像新娘傀缩。我一直安慰自己,他們只是感情好农猬,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布赡艰。 她就那樣靜靜地躺著,像睡著了一般斤葱。 火紅的嫁衣襯著肌膚如雪瞄摊。 梳的紋絲不亂的頭發(fā)上勋又,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機與錄音换帜,去河邊找鬼楔壤。 笑死,一個胖子當著我的面吹牛惯驼,可吹牛的內(nèi)容都是我干的蹲嚣。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼祟牲,長吁一口氣:“原來是場噩夢啊……” “哼隙畜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起说贝,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤议惰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后乡恕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體言询,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年傲宜,在試婚紗的時候發(fā)現(xiàn)自己被綠了运杭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡函卒,死狀恐怖辆憔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情报嵌,我是刑警寧澤虱咧,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站锚国,受9級特大地震影響腕巡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜跷叉,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一逸雹、第九天 我趴在偏房一處隱蔽的房頂上張望营搅。 院中可真熱鬧云挟,春花似錦、人聲如沸转质。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽休蟹。三九已至沸枯,卻和暖如春日矫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绑榴。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工哪轿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人翔怎。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓窃诉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赤套。 傳聞我的和親對象是個殘疾皇子飘痛,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)容握,斷路器宣脉,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 遺留代碼 其他人那兒得來的代碼; 錯綜復雜剔氏,難以理清的結(jié)構(gòu)塑猖,需要改變?nèi)欢鴮嶋H上又根本不能理解的代碼; 沒有編寫相應(yīng)...
    賈尼閱讀 3,305評論 1 6
  • Swift語法基礎(chǔ)(五)-- (類和結(jié)構(gòu)體践险、屬性、方法) 本章將會介紹 類和結(jié)構(gòu)體對比結(jié)構(gòu)體和枚舉是值類型類是引用...
    寒橋閱讀 1,079評論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法吹菱,類相關(guān)的語法巍虫,內(nèi)部類的語法,繼承相關(guān)的語法鳍刷,異常的語法占遥,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • 我自小孤獨瓦胎,不太會與人一起玩,年齡越大這樣的現(xiàn)象愈明顯尤揣,從兩年級下半學期就開始看書搔啊,剛開始看一些有插畫童話書”毕罚《鐵...
    沐子2閱讀 2,691評論 0 0