약 JSON에 대한 프레임 워크를 배우려고합니다. 프레임 워크 이름은 입니다. HandyJSON입니다. 포인터에 대한 몇 가지 문제점이 있습니다.UnsafePoint 및 Swift Object에 대한 규칙은 무엇입니까? 여기에 몇 가지 코드가 있습니다
클래스 속성이 구조체에 표시 될 수 있다는 것을 알고 있습니다. 맞습니까?
"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