gpt4 book ai didi

iphone - objc_setAssociatedObject 在 iPhone 模拟器中不可用

转载 作者:太空狗 更新时间:2023-10-30 03:33:34 24 4
gpt4 key购买 nike

在 3.1 SDK 中,Apple 添加了对关联对象的支持。

但是,模拟器不会编译包含对 objc_setAssociatedObject、objc_getAssociatedObject 等的引用的代码。 (未声明的错误)

这附近有没有?我可以让 iPhone 模拟器编译这段代码吗?我不愿意在设备上进行所有测试。


更新

提交错误:rdar://7477326

最佳答案

我认为这不会在 3.x SDK 中修复,因此另一个修复是仅定义函数并通过动态查找调用下一个定义。

标题:

#if TARGET_IPHONE_SIMULATOR
enum {
OBJC_ASSOCIATION_ASSIGN = 0,
OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1,
OBJC_ASSOCIATION_COPY_NONATOMIC = 3,
OBJC_ASSOCIATION_RETAIN = 01401,
OBJC_ASSOCIATION_COPY = 01403
};
typedef uintptr_t objc_AssociationPolicy;

void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy policy);
id objc_getAssociatedObject(id object, void *key);
void objc_removeAssociatedObjects(id object);
#endif

实现:

#if TARGET_IPHONE_SIMULATOR
void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy policy) {
((void (*)(id, void *, id, objc_AssociationPolicy))
dlsym(RTLD_NEXT, "objc_setAssociatedObject")) (object, key, value, policy);
}
id objc_getAssociatedObject(id object, void *key) {
return ((id (*)(id, void *))
dlsym(RTLD_NEXT, "objc_getAssociatedObject"))(object, key);
}
void objc_removeAssociatedObjects(id object) {
((void (*)(id))
dlsym(RTLD_NEXT, "objc_removeAssociatedObjects"))(object);
}
#endif

关于iphone - objc_setAssociatedObject 在 iPhone 模拟器中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1916130/

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