0

这仅用于单元测试目的

我正在尝试访问一个 dispatch_queue_t,它是用于单元测试目的的目标 C 对象的受保护实例变量。我正在使用 valueForKey 访问作为对象的受保护实例变量,我可以为 dispatch_queue_t 进行等效调用吗?

谢谢

编辑:我已经读过可以访问这些值,我只是找不到如何解释。

Edit2:当我尝试调用 valueForKey 时,我得到 2013-09-24 14:17:35.235 MyApp[7729:a0b] *由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[valueForUndefinedKey:]:此类不是键值键 _queue 的编码兼容。

Edit3:我刚刚测试并意识到它应该与结构一起使用,引发异常的是检索 dispatch_queue_t

Edit4:这是在使用自动引用计数的代码中

4

2 回答 2

2

使用与-valueForKey:对象相同的方法。

调用-valueForKey:将始终返回一个对象,但在访问非对象类型的情况下,该值被包装在NSValue对象中。对于结构,它是NSValue直接的,对于数字(intfloat),它使用NSNumber子类。

在你得到 之后NSValue,这就是你解包结构的方式:

NSValue *value = [object valueForKey:@"key"];
struct Something s;
[value getValue:&s];
// `s` contains the desired struct
于 2013-09-24T21:17:31.140 回答
1

找到的解决方案:

访问实例变量的另一种方法是使用 object_getIvar 使用以下代码:

Ivar queueIvar = class_getInstanceVariable([_myObject class], "_queue");
_privateQueue = (__bridge dispatch_queue_t)(object_getIvar(_myObject, queueIvar));
于 2013-09-24T23:23:18.620 回答