美文网首页
HandyJSON 库的Crash问题

HandyJSON 库的Crash问题

作者: 古月思吉 | 来源:发表于2018-10-11 23:13 被阅读0次

工程使用了一个 HandyJSON 的库,升级到 Swift 4.1 后 Crash 了。

1.Crash 在:

var numberOfFields: Int {
    return Int(pointer.pointee.numberOfFields)
}
crash图.png

2.原因

  • HandyJSON 应该是裁剪使用了一些 Reflection 代码。标准的 Swift Api 还没有完整反射功能的,HandyJSON 的某些接口实际上利用了 Swift 对象,没有公开的内存布局进行赋值,这种做法是一种 Hack 手段,比较危险。

3.解决办法:

  • 修改代码:
var nominalTypeDescriptor: NominalTypeDescriptor? {
        let pointer = UnsafePointer<Int>(self.pointer)
        let base = pointer.advanced(by: nominalTypeDescriptorOffsetLocation)
        if base.pointee == 0 {
            // swift class created dynamically in objc-runtime didn't have valid nominalTypeDescriptor
            return nil
        }
        return NominalTypeDescriptor(pointer: relativePointer(base: base, offset: base.pointee - base.hashValue))
    }
解决图.png

参考文章:
https://zhuanlan.zhihu.com/p/35251092?edition=yidianzixun&utm_source=yidianzixun&yidian_docid=0Ii3ZJNz

相关文章

网友评论

      本文标题:HandyJSON 库的Crash问题

      本文链接:https://www.haomeiwen.com/subject/vdniaftx.html