• 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的。自从混编了之后。。。🕳🕳🕳
    
    
我们在线,来聊聊吧