移动APP性能
2023-05-27 23:39:11 0 举报
AI智能生成
移动APP性能
作者其他创作
大纲/内容
要点
拦截到
调回去
名词约定:原始方法、代理方法
SEL数据类型
IMP数据类型
监控 技术
NSURLProtocol
应用场景
1.自定义请求和响应
2.提供自定义的全局缓存支持
3.重定向网络请求
4.提供HTTP Mocking (方便前期测试)
5.其他一些全局的网络请求修改需求
6.内容过滤
基本步骤
1、定一个NSURLProtocol子类
2、注册这个类
3、NSURLProtocol子类实现
相关方法
canInitWithRequest:
canonicalRequestForRequest
requestIsCacheEquivalent
startLoading
stopLoading
4.实现代理
NSURLConnectionDelegate
NSURLConnectionDataDelegate
5.注销
坑
1.导致递归调用
2.未实现足够的回调
3.崩溃报错
4.httpBody
5.拦截对证书认证影响
优点
拦截UIWebView中的数据
缺点
性能不好
Method swizzling
特点
针对一个类
基本步骤
1、用class_addMethod为某类添加“代理方法”
2、调用method_exchangeImplementations交换IMP
3、确保你的“代理方法”调用了“原始方法”
缺点
死循环
对类簇不起作用
重复执行
改进版本
原理
利用block作为IMP
步骤
1.获取原始IMP,保存到变量
2.定义Block,其中引用原始IMP
3.Block专成IMP
4.直接替换目标方法
Isa swizzling
特点
针对一个对象
原理
修改Isa指针
基本步骤
1、(动态)创建目标类子类
2、(动态)为子类添加方法
3、修改目标对象的isa
object_setClass
场景
KVC
KVO
关于dealloc
Isa swizzling+NSProxy
基本步骤
1、从NSProxy派生一个子类
2、实现那三个方法
methodSignatureForSelector
forwardInvocation
responseToSelector
3、把目标对象的isa指向这个类
Others
fishhook
原理
符号表的修改
Runlook观察者/CADisplayLink
sendEvent/addTarget:::
疑难
WKWebView
独立进程
TCP数据
用一个入口拦截任意一个方法
不定参数用栈传的
固定参数用寄存器传的
0 条评论
下一页