JSONに関するフレームワークを学ぼうとしています。フレームワーク名はHandyJSONです。私はPointerについていくつか問題があります。UnsafePointとSwiftオブジェクトのルールは何ですか?ここにいくつかのコードがあります
私はクラスプロパティが構造体に表示されることがわかりますが、それは正しいですか?
"func class_rw_t()"はどういう意味ですか?
なぜ "databits_t & fast_data_maskは" "_class_rw_t" を指すことができますか?そしてなぜ "fast_data_mask"が "0x00007ffffffffff8"ですか?
コード:
struct _class {
var kind: Int
var superclass: Any.Type?
var reserveword1: Int
var reserveword2: Int
var databits: UInt
// other fields we don't care
func class_rw_t() -> UnsafePointer<_class_rw_t>? {
if MemoryLayout<Int>.size == MemoryLayout<Int64>.size {
let fast_data_mask: UInt64 = 0x00007ffffffffff8
let databits_t: UInt64 = UInt64(self.databits)
return UnsafePointer<_class_rw_t>(bitPattern: UInt(databits_t & fast_data_mask))
} else {
return UnsafePointer<_class_rw_t>(bitPattern: self.databits & 0xfffffffc)
}
}}
struct _class_rw_t {
var flags: Int32
var version: Int32
var ro: UInt
func class_ro_t() -> UnsafePointer<_class_ro_t>? {
return UnsafePointer<_class_ro_t>(bitPattern: self.ro)
}}
struct _class_ro_t {
var flags: Int32
var instanceStart: Int32
var instanceSize: Int32}
class TestModel {}
let c = TestModel()
let pointer = unsafeBitCast(TestModel.self, to: UnsafePointer<_class>.self)
let instanceStart = pointer.pointee.class_rw_t()?.pointee.class_ro_t()?.pointee.instanceStart
ありがとう、objc-runtime-new.hが私に必要なものです。 – Eggplant