1。给分类添加属性
某个SDK里对象添加属性,但是无法修改这个对象,这时候就可以用分类来实现
这里需要用到关联函数objc_setAssociatedObject和objc_getAssociatedObject等方法
比如我们写NSObject的类拓展(NSObject+xxx),应用到上面的方法;
2.交换方法
class_getInstanceMethod和method_exchangeImplementations
比如我们平常写UIViewController+xxx;
我们需要每个界面都需要判断添加的 我们可以进行viewDidLoad或者viewWillAppear的方法交换
对于上面第一个我们可以搜索项目中三方sdk中会有多个;
对于第二个我说一下:
例如我们在全局判断界面添加水印
Method fromMethod = class_getInstanceMethod([self class], @selector(viewDidLoad));
Method toMethod = class_getInstanceMethod([self class], @selector(xxxViewDidLoad));
if (!class_addMethod([self class], @selector(xxxViewDidLoad), method_getImplementation(toMethod), method_getTypeEncoding(toMethod))) {
method_exchangeImplementations(fromMethod, toMethod);
}
在xxxViewDidLoad添加水印,或者更改viewWillAppear也行都是类似的;
上面我举的例子也可以写一个全局BaseViewcontroller,页面继承于baseVC;在baseVC里面判断,注意必须全局原生写,如果app中包含uniapp等就需要UIViewController 的拓展进行设定。