标签:
JSPatch
在进行到overrideMethod
进行方法实现IMP替换时要求class
实现NSCoping
协议,而不继承自NSObject
的swift类是不遵循该协议的,因此崩溃。static void _initJPOverideMethods(Class cls) { if (!_JSOverideMethods) { _JSOverideMethods = [[NSMutableDictionary alloc] init]; } if (!_JSOverideMethods[cls]) { _JSOverideMethods[(id<NSCopying>)cls] = [[NSMutableDictionary alloc] init]; } }
此处JSPatch
在初始化缓冲区的时候将Class
作为Dictionary
的key
进行保存,而Dictionary
在设置key-value
时会拷贝 key
值,所以会导致给一个不遵循NSCoying
协议的对象发送了copyWithZone:
消息,导致崩溃。
objc_msgSend
函数无法用于 Swift object,这个导致JSPatch
实现方法调用(消息转发)的基础机制在 Swift 中失效了,这也是热修复真正无解的地方,也是最致命的。标签:
原文地址:http://www.cnblogs.com/jinfengboy/p/5819802.html