gpt4 book ai didi

objective-c - *(id*)obj 的目的是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:26:06 26 4
gpt4 key购买 nike

typedef struct _wax_instance_userdata {
id instance;
BOOL isClass;
Class isSuper;
BOOL actAsSuper;
} wax_instance_userdata;

https://github.com/probablycorey/wax/blob/master/lib/wax_helpers.m#L497

void* afunc(){ // the function is too long
void *value = nil;
// ...
wax_instance_userdata *instanceUserdata = (wax_instance_userdata *)luaL_checkudata(L, stackIndex, WAX_INSTANCE_METATABLE_NAME);

instance = instanceUserdata->instance;

*(id *)value = instance;
return value;
}

https://github.com/probablycorey/wax/blob/master/lib/wax.m#L243

id* ret = afunc(); //same without this * .
id lastValue = *(id*)ret;
//now I can use lastValue;

为什么需要这样做?我无法理解 *(id*)还有 id* ret = afunc() ,当删除这颗星时,它也能正常工作。

最佳答案

afunc 正在引用函数 (void *)wax_copyToObjc(...)。此函数的目的是将 Lua 对象转换为 C 或 Objective-C 值。因为它可能是原始类型或 objective-c 实例,所以它不知道要返回什么。所以总是返回一个指向 void 的指针(意思是指向未知事物的指针)。如果是 id,它将返回一个指向 id 的指针。

可能更容易解释 int 发生了什么,它会为 int 分配空间并复制其值:

value = calloc(sizeof(int), 1)
*(int *)value = lua_tointeger(L, stackIndex)

(int *)value 被翻译成“value is a pointer to an int”在它前面添加 * 就像 *(int *)value 转换为“将 int 复制到 value 指向的分配内存。”

在你的例子中:

id *ret = afunc(); // returns a pointer to an id
id lastValue = *(id*)ret; // dereferences the pointer to id so it is just an id

关于objective-c - *(id*)obj 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9208377/

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