最近面对一个产品需求,但是产品需求是改动第三方SDK的东西,所以在第三方SDK上我是坐了一系列的修改, 按照我的记忆,把我曾经的修改找回来。
修改原来的响应方法
修改原来的响应方法,自然而然就想到了hook,但是我得先找到原来执行的是什么方法,我通过classdump (详细使用可见 https://www.jianshu.com/p/777f350f6851),猜测到有一个关键的方法 - (void)buttonUp; ,那么我就要hook这个方法。
首先我要创建一个分类,在xcode创建文件中我需要选择Object-C File,如图所示:
然后输入分类名称和需要分类的类名之后,就创建好了对应的文件。
然后通过下面的手段,原本在要执行buttonUp方法的时候不执行buttonUp方法,反而执行咱们自己的MyButtonUp方法
+ (void)initialize {
Method method1 = class_getInstanceMethod([self class], NSSelectorFromString(@"buttonUp"));
Method method2 = class_getInstanceMethod([self class], @selector(MyButtonUp));
method_exchangeImplementations(method1, method2);
}
调用原本的私有方法
在开发过程中,由于一些需求的存在,需要调用一些类的私有方法,但是这个类可能是pod进来了,为了能够很好的进行升级,需要通过一些特别的方法进行调用,比如
if ([chatVC respondsToSelector:@selector(next)]) {
[chatVC performSelector:@selector(next)];
}
但是随之而来的出现一个警告:Undeclared selector '***********',
为了消除这个警告,在前边添加这一行代码即可
#pragma GCC diagnostic ignored "-Wundeclared-selector"
网友评论