Vicky
2019-05-28
戴老师:
“第三个风险是,交换的方法如果依赖了 cmd,那么交换后,如果...”这句话有点不太理解,能做个详细的阐述吗?交换方法在什么情况会依赖cmd?不是特别理解,谢谢~
18
opooc
2019-05-29
问题跟Vicky 朋友一样,我不清楚这里的cmd指的是什么,谢谢
5
Realtime
2019-05-29
老师,swift 有 相关功能么? 没有的话,怎么做无侵入埋点呀。苹果为啥把动态功能去掉了,怎么考虑的呀?有相关的替代方法么?
5
bart
2019-06-03
@Vicky 我帮你举个栗子
当你在运行时替换某对象中的某函数实现时,如果需要在替换函数中调用原始函数实现,则可以使用cmd。
1.创建新类继承老类实现相同的函数
2.在老类的分类的函数中将被hook的类的isa指向新类(也就是修改了元类)
此时的实例实际上就是新创建子类的实例了
3.所以此时调用实例的函数就会调用子类的函数
4.(可选:在子类中动态获取父类,调用父类的eat函数)就是这步,可以使用cmd。
展开
4
Usama Bin Laden
2019-05-28
方法交换,都没用过库,都是直接写的。。。
4
席🍐🍎
2019-05-28
@Vicky 那是指方法内部对cmd做了判断,运行特殊的逻辑,进行swizz之后原方法的cmd会变,可能会导致逻辑错误
3
daniel
2019-07-05
cmd是指每个函数中都会存在的一个隐藏参数,比如我们想要知道当前函数的名字可以通过在函数内部NSStringFromSelector(_cmd)打印当前函数名字,方法交换后显然原方法的cmd不同了,就跟评论其他人说的差不多,假如原函数有些逻辑是对_cmd进行的,这时候就会出现奇怪的错误。
2
Trust me ҉҉҉҉...
2019-05-28
aspect风险才多 bug也多
2
筇琼
2019-05-29
戴老师你好,用 Aspects 进行方法拦截时,如何实现带有返回值方法的替换?此时的返回值由我自己定义,而调用原方法的对象可以得到这个返回值。
2
1
Kai
2019-05-29
swift怎么进行类似method swizzling的技术呢?
1
hopestar90
2019-05-28
Aspects确实在做hook上很有想法,不仅能对类做hook,还能对单独实例做hook。但是本质上他用了消息转发流程,作者也说了 不适合于高频度调用的方法
1
景天儿
2019-06-08
cmd就是_cmd吧,意思是swizz的方法中,使用了_cmd这个宏定义。
景天儿
2019-06-08
这篇关于Aspect为什么更安全,也就是他填坑的原理,讲的有点儿抽象……
Chouee
2019-05-29
原来纯OC开发,Aspect无埋点统计用得66的。自从混编了之后。。。🕳🕳🕳
我们在线,来聊聊吧
✕
您好,当前有专业客服人员在线,让我们来帮助您吧。
我们在线,来聊聊吧