gpt4 book ai didi

objective-c - *(id *)((char *)object + ivar_getOffset(ivar)) 和 object_getIvar(object, ivar) 有什么区别

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

根据Objective-C runtime reference :

ivar_getOffset Returns the offset of an instance variable.

ptrdiff_t ivar_getOffset(Ivar ivar) Discussion For instance variables of type id or other object types, call object_getIvar and object_setIvar instead of using this offset to access the instance variable data directly.

Declared In runtime.h

这是为什么? object_getIvar 对对象类型做了什么?

编辑:将问题从下标 (void *) 更改为 (id *)。

最佳答案

在获取 ivar 的值时,这两种方法没有区别。您可以通过查看 object_getIvar() 在 Apple 的开源 Obj-C runtime code 中的实现来验证这一点.

object_setIvar() 不仅仅是分配到对象指针的偏移量。小心调用垃圾收集运行时函数 objc_assign_ivar() 以执行实际分配。

将来可能会向这些功能中的任何一个添加更多魔法;通常,您应该在任何给定时间使用可用的最高级别 API。

关于objective-c - *(id *)((char *)object + ivar_getOffset(ivar)) 和 object_getIvar(object, ivar) 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3572068/

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