- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 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/
在类别 UIButton .h 文件中: @interface UIButton (zz) @property (nonatomic,strong) NSString *param1; @proper
我一直这样使用 objc_setAssociatedObject(): objc_setAssociatedObject(myObject, @"myKey1", obj2, OBJC_ASSOCIA
当我使用 objc_setAssociatedObject 时,我知道是使用 retain 还是 assign,但我不知道如何在 OBJC_ASSOCIATION_RETAIN 和 OBJC_ASSO
Xcode 6.4 swift 1.2 我该怎么做? 谢谢大家 看到这个错误 最佳答案 试试这个: objc_setAssociatedObject(self, &loadOperationKey,
对类对象使用 objc_setAssociatedObject 是否正确? 我们经常用这样的静态变量来模拟类变量: Objective C Static Class Level variables但是
我正在尝试制作一个用于 objc_setAssociatedObject 的 key ,如这个问题所示: How do I use objc_setAssociatedObject/objc_getA
这个问题在这里已经有了答案: How is Associative Reference implemented? (2 个答案) 关闭 9 年前。 正如我们所知,我们可以使用类别和运行时方法在 Ob
在我接手的一个项目中,原作者选择使用 objc_setAssociatedObject(),我不是 100% 清楚它的作用或他们决定使用它的原因。 我决定查一下,不幸的是,文档并没有很好地描述它的用途
我只想向 UIView 添加一个属性,如下所示, #import "UIView+Extension.h" #import @implementation UIView (Extension) -
我正在研究向所有 UIView 实例添加属性(在本例中为整数)的方法,无论它们是否是子类。在类别中使用 objc_setAssociatedObject() 和 objc_getAssociatedO
在 3.1 SDK 中,Apple 添加了对关联对象的支持。 但是,模拟器不会编译包含对 objc_setAssociatedObject、objc_getAssociatedObject 等的引用的
如果我使用一个类别,该类别使用 objc_setAssociatedObject 向对象添加伪属性,我如何确保它们被正确释放?我是否必须在 dealloc 中手动释放它们? 最佳答案 您分配的行为决定
我知道 OBJC_ASSOCIATION_ASSIGN 存在,但如果目标对象被释放,它会将引用清零吗?或者它是否像过去那样需要将引用置为零,否则我们以后可能会面临访问错误的风险? 最佳答案 正如 ul
如果我在类别实现中使用 objc_setAssociatedObject/objc_getAssociatedObject 将模拟实例变量存储在 setter 方法中,我将如何访问 getter 方法
我想设置n Swift 中一个对象的关联对象数量 我的理解是UnsafeRawPointer的通常模式引用是这样的... static var reference = "someRef" public
import UIKit import ObjectiveC var SubRowObjectKey: String = "subRow" extension IndexPath { var
我正在尝试通过扩展向 UIView 添加点击手势支持。这使用 Objective-C 非常简单,但是当我尝试在运行时属性上设置 void 返回 block 时出现以下错误。 error: type '
在文档中... objc_setAssociatedObject Sets an associated value for a given object using a given key and a
我正在尝试使用关联对象 API 将“属性”添加到类别。 objc_setAssociatedObject(self, &kIsAnimatingAssocObjKey, animating, OBJC
我计划使用 objc_setAssociatedObject() 将 iVars 添加到类别中。但是,我不确定何时调用 objc_removeAssociatedObjects() 来删除它们。 有没
我是一名优秀的程序员,十分优秀!