iOS runtime ~ 動態(tài)添加方法

//聯(lián)系人:石虎?QQ:1224614774?昵稱:嗡嘛呢叭咪哄

一、概念

1.動態(tài)添加方法

? 開發(fā)使用場景:如果一個類方法非常多,加載類到內(nèi)存的時候也比較耗費資源,需要給每個方法生成映射表,可以使用動態(tài)給某個類,添加方法解決。

2.效果圖:

二、代碼實現(xiàn)

1.控制器代碼:

#pragma mark -動態(tài)添加方法

#pragma mark ------------------

- (void)addMethods

{

?SHPerson?*person = [[SHPerson?alloc]?init];

?//默認person,沒有實現(xiàn)eat方法,可以通過performSelector調(diào)用,但是會報錯。

?//動態(tài)添加方法就不會報錯

[person?performSelector:@selector(eat)];


}

- (void)addMethods2

{

?SHPerson2?*person = [[SHPerson2?alloc]?init];

[person?performSelector:@selector(writeCode:)?withObject:@100];


}

2.分類代碼

//? Created by ?on 2018/1/1.

//? Copyright ? 2018年 石虎. All rights reserved.

//

#import?"SHPerson2.h"

#import?"objc/message.h"

@implementation?SHPerson2

voideffect(id?self,?SEL?_cmd,?NSNumber?*meter) {


?NSLog(@" effect ==> %@", meter);


}

+ (BOOL)resolveInstanceMethod:(SEL)sel

{

?if?(sel ==?NSSelectorFromString(@"writeCode:")) {


?// class: 給哪個類添加方法

?// SEL: 添加哪個方法

?// IMP: 方法實現(xiàn) => 函數(shù) => 函數(shù)入口 => 函數(shù)名

?// type: 方法類型:void用v來表示,id參數(shù)用@來表示,SEL用:來表示

?//aaa不會生成方法列表

?class_addMethod(self, sel, (IMP)?effect,?"v@:@");


?return?YES;

? ? }

?return?[super?resolveInstanceMethod:sel];

}

@end

3.調(diào)試中效果圖:

謝謝!!!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,041評論 0 9
  • 對于從事 iOS 開發(fā)人員來說,所有的人都會答出【runtime 是運行時】什么情況下用runtime?大部分人能...
    夢夜繁星閱讀 3,804評論 7 64
  • #幸福是需要修出來的~每天進步1%~幸福實修08班~015-董超-杭州 20170909【幸福三朵玫瑰】 昨日3朵...
    julie123閱讀 220評論 0 2
  • 37、 “您能告訴我您的成功故事嗎?……” 這種“告訴我你的故事”策略告訴你的潛在客戶和/或當(dāng)前的客戶, 對于他們...
    追著太陽的尾巴閱讀 278評論 0 0
  • 在大公司工作待過一段時間,看過一些人風(fēng)光的進來,黯然的離開,而一些人平凡的進來,結(jié)果年終考評他最好??偨Y(jié)一下職場工...
    LaurenceZi閱讀 345評論 0 0

友情鏈接更多精彩內(nèi)容