如何通过间接传递(和设置)非对象?

时间:2011-09-01 04:56:36

标签: objective-c pointers indirection multiple-indirection

NSError对象经常像这样使用(取自this previous question):

- (id)doStuff:(id)withAnotherObjc error:(NSError **)error;

我想用BOOL间接实现类似的东西:

- (id)doStuff:(id)withAnotherObjc andExtraBoolResult:(BOOL **)extraBool;

但我无法弄清楚如何使其正常工作。

对于涉及NSError的给定方法规范,正确的实现将涉及类似的事情(再次来自the previous question):

*error = [NSError errorWithDomain:...];

使用类似的逻辑,似乎这应该适用于BOOL间接:

*extraBool = &YES; // ERROR! Address expression must be an lvalue or a function designator

为什么这不起作用以及实现这个的正确方法是什么?

1 个答案:

答案 0 :(得分:4)

请记住,对于对象,您正在使用指针(例如,NSError*),因此使用此方法,您最终会得到指向指针的指针(例如,NSError**) 。但是,在使用BOOL时,您应该使用指向BOOL的指针:即,只有一个间接级别,而不是两个级别。因此,你的意思是:

- (id)doStuff:(id)withAnotherObjc andExtraBoolResult:(BOOL *)extraBool;

随后:

*extraBool = YES;