这仅用于单元测试目的
我正在尝试访问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:这是使用自动引用计数的代码
答案 0 :(得分:2)
使用与对象相同的-valueForKey:
。
调用-valueForKey:
将始终返回一个对象,但是在访问非对象类型的情况下,该值将包含在NSValue
对象中。如果结构是直接NSValue
,如果是数字int
,float
,则使用NSNumber
子类。
获得NSValue
之后,这就是解开结构的方式:
NSValue *value = [object valueForKey:@"key"];
struct Something s;
[value getValue:&s];
// `s` contains the desired struct
答案 1 :(得分:1)
找到解决方案:
访问实例变量的另一种方法是使用object_getIvar:
使用以下代码Ivar queueIvar = class_getInstanceVariable([_myObject class], "_queue");
_privateQueue = (__bridge dispatch_queue_t)(object_getIvar(_myObject, queueIvar));