OC採用的是懶加載機制,只要一個方法實現了,就會添加到方法列表中佔用內存。而很多時候,很多功能在某些用戶那裏是很少用到的,比如騰訊的xx會員,你不充值,是無法使用會員提供的服務的。這種情況下,可以考慮使用Runtime動態添加方法。
- ViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
TestModel *testModel = [[TestModel alloc] init];
//performSelector在動態添加方法時使用
[testModel performSelector:@selector(write:)
withObject:@"動態添加方法測試"];
}
- TestModel.m:創建TestModel用於Runtime測試動態添加方法
#import "TestModel.h"
#import <objc/message.h>//用於導入Runtime
@implementation TestModel
void writeChange(id self,SEL _cmd,NSString *str)
{
NSLog(@"測試動態添加方法:%@",str);
}
//只要一個對象調用了一個未實現的方法就會調用這個方法進行處理,用於動態添加方法時,處理未實現方法
+ (BOOL)resolveInstanceMethod:(SEL)sel
{
//找到未實現的方法
if (sel == NSSelectorFromString(@"write:")) {
/**
* 動態添加方法
* 參數1 添加方法的類
* 參數2 添加哪個方法
* 參數3 方法實現,替換方法(其實是函數)
* 參數4 方法類型,參考文檔 Type Encodings
*/
class_addMethod(self, sel, (IMP)writeChange, "v@:@");
return YES;
}
return [super resolveInstanceMethod:sel];
}
@end
- 運行效果