gpt4 book ai didi

swift - UnsafePoint 和 Swift Object 的规则是什么?这是一些代码

转载 作者:行者123 更新时间:2023-11-30 11:54:15 26 4
gpt4 key购买 nike

我尝试学习一个关于JSON的框架。框架名称是HandyJSON。我对Pointer有一些问题。

我只知道类属性可以显示在结构中,对吗?

“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

最佳答案

您粘贴的代码可访问 Objective-C 运行时的内部详细信息。它非常先进,也非常脆弱。如果我是你,我就会远离这个图书馆。

_class_rw_t 类型用于访问 objc-runtime-new.h 中定义的 class_rw_t 结构体。您还可以在该文件中查看 FAST_DATA_MASK 的定义和使用。您需要了解 C++ 才能理解 Objective-C 运行时源代码。

关于swift - UnsafePoint 和 Swift Object 的规则是什么?这是一些代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48003493/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com