- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
为什么 Objective-C 运行时方法 object_getInstanceVariable
和 object_setInstanceVariable
在自动引用计数下不可用,我该怎么办?
object_getInstanceVariable
是错误的。我该如何解决这个问题?
最佳答案
请改用 valueForKey:
和 setValue:forKey:
方法。这些允许您读取/写入对象的任何实例变量。对于原始类型的实例变量,这些方法返回/获取包装为 NSNumber
或 NSValue
对象的值。
您的实例变量大于指针大小,也许是 struct
的?下面是一些代码片段,展示了如何使用 struct
,首先让我们定义一个 struct
:
typedef struct
{
int i;
float f;
char c;
} ThreePrimitives;
和一个带有(私有(private))实例变量的类:
@interface StructClass : NSObject
...
@end
@implementation StructClass
{
ThreePrimitives myStruct;
}
...
@end
设置实例变量:
ThreePrimitives a = { 42, 3.14, 'x' };
NSValue *wrapA = [NSValue value:&a withObjCType:@encode(ThreePrimitives)];
[sc setValue:wrapA forKey:@"myStruct"];
读取实例变量:
ThreePrimitives b;
NSValue *extracted = [sc valueForKey:@"myStruct"];
[extracted getValue:&b];
HTH
关于objective-c - ARC 中的 object_getInstanceVariable/object_setInstanceVariable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21277564/
有谁知道如何使用 object_setInstanceVariable 设置结构变量?它适用于引用类型: object_setInstanceVariable(obj, "_variable", re
我想转换一个实例 object_setInstanceVariable(self, [key UTF8String], *(id**)addr); 到 ARC。当我尝试使用 Xcode 内置的 Obj
为什么 Objective-C 运行时方法 object_getInstanceVariable 和 object_setInstanceVariable 在自动引用计数下不可用,我该怎么办?当实例变
我是一名优秀的程序员,十分优秀!