gpt4 book ai didi

objective-c - ARC 中的 object_getInstanceVariable/object_setInstanceVariable

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:44 27 4
gpt4 key购买 nike

为什么 Objective-C 运行时方法 object_getInstanceVariableobject_setInstanceVariable 在自动引用计数下不可用,我该怎么办?

当实例变量的大小大于开发目标的指针大小时,

object_getInstanceVariable 是错误的。我该如何解决这个问题?

最佳答案

请改用 valueForKey:setValue:forKey: 方法。这些允许您读取/写入对象的任何实例变量。对于原始类型的实例变量,这些方法返回/获取包装为 NSNumberNSValue 对象的值。

您的实例变量大于指针大小,也许是 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/

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