加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – ARC中的object_getInstanceVariable / object_se

发布时间:2020-12-16 09:50:01 所属栏目:百科 来源:网络整理
导读:为什么Objective-C运行时方法object_getInstanceVariable和object_setInstanceVariable在自动引用计数下不可用,我该怎么办? 当实例变量的大小大于开发目标的指针大小时,object_getInstanceVariable是错误的.我怎么能绕过这个? 解决方法 请改用valueForKey
为什么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;

和一个带有(私有)实例变量的类:

@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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读