gpt4 book ai didi

objective-c - 数据成员如何存储在对象中?

转载 作者:搜寻专家 更新时间:2023-10-30 20:03:42 25 4
gpt4 key购买 nike

我知道在 Objective C 中,每个对象都有前 4 个字节 [取决于处理器的类型 ] 作为存储在其中的 isa 指针,告诉它它属于哪个类以及使用哪个调度表将选择器解析为地址一个函数。

我想知道的是,如何在这些方法中存储和访问数据成员。self 在每个被调用的函数中作为隐式对象传递。

我们使用 setters n getters 来处理其他成员函数中的数据成员,这是一种很好的做法,

但是当我们在初始化器或访问器中直接引用数据成员时,它们是如何被访问的。它们是在编译时被某个地址替换还是其他什么?

最佳答案

实际上 afaik 内存布局是特定于实现的,但是 http://algorithm.com.au/downloads/talks/objective-c-internals/objective-c-internals.pdf应该让您对对象数据和对象消息传递的内部工作有一个很好的了解。

当您使用直接成员访问时,基本上发生的是您直接从作为实际对象的“结构”中获取。也就是说,编译器基本上只是将偏移量添加到您的对象/结构的地址并读取该内存地址的内容。

也许我应该补充一点,这是从 XCode 逆向工程而来的,并没有用我能找到的任何规范编写,因此根据这种行为很可能是个坏主意。由于不允许外部访问 iVar,因此决定权基本上取决于编译器,并且可以随时更改。

编辑:正如@FrederickCheung 指出的那样,Objective C 2.0 可能已经改变了这种行为。

关于objective-c - 数据成员如何存储在对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8779506/

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