iOS中多方swizzle一个target类的方法执行结果验证

在大型iOS项目中,基础组件可能被多个业务团队swizzle。文章通过示例展示了当不同视图控制器(ViewController、DDMNOtificationViewController、DDMSwizzledViewController、DDMSwizzleSecondViewController)按顺序push并各自在+load方法中hook同一实例方法时,实际执行的方法遵循先加载先执行的规则。调整源文件的编译顺序会影响最终的执行结果。结论是,后加载的类会调用到在它之前+load执行的类的hook方法。
摘要由CSDN通过智能技术生成

背景:项目越来庞大,业务团队很多的情况下,就会出现一种情况,基础组件被很多业务方所依赖,比如其中的某个方法,被不同的业务方去多次swizzle, 多处hook一个方法,最后执行的方法是哪个?是最后一个hook的使用方还是?

示例代码说明, 4个viewController, 按照以下顺序依次push: 

ViewController -> DDMNOtificationViewController -> DDMSwizzledViewController -> 

DDMSwizzleSecondViewController

在每个vc的viewDidLoad方法里,调用被hook的方法(此时每个vc的实例方法已经在+load hook了,关于+load的问题后续会写一篇)

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.navigationItem.title = NSStringFromClass([self class]);
    
    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 200, 44)];
    button.backgroundColor = [UIColor yellowColor];
    [button addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
}

- (void)ddm_viewcontroller_testInstanceMet
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值