目标C中指向BOOL的指针

时间:2012-06-16 05:45:32

标签: objective-c pointers

代码:

NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
BOOL initial = YES;
[invocation setArgument:&initial atIndex:2];

问题:

是否可以在不创建临时变量的情况下将YES传递给setArgument:atIndex:

我在想,也许有一种语言结构,我在运行时并不知道和/或不变,我总是可以指出YES

谢谢!

3 个答案:

答案 0 :(得分:6)

不,没有任何干净,可靠的方式。

NSInvocation将取消引用您发送它的任何指针,并复制方法签名指定的长度数据。您需要在某处获取该信息,以便获取地址,并且拥有本地变量是最好的方法。

答案 1 :(得分:0)

指针必须指向某些东西(包括垃圾)或什么都没有(意味着指针被初始化为NULL)。指针是对象的间接引用。如果指针没有指向这样的对象,则可能不需要指针。您只需致电setArgument:NULL atIndex:2

在代码中使用类似指针的情况是传递输出参数,其值将在您调用的函数中设置,在这种情况下,您可能不需要要在将参数传递给函数之前初始化该函数,该函数应该负责为其分配正确的值。

所以在你的情况下,如果你不打算使用输出参数,你只需要将原语BOOL传递给函数,不需要指针。

修改

我刚刚看了一下NSInvocation的文档。答案与其他人一样,没有。

您必须传递一个指针,必须指向现有对象才能使NSInvocation正常工作。

答案 2 :(得分:0)

答案是否定的。指针必须指向内存中的地址。首先,您必须分配该内存,然后将该分配的内存的地址发送到该方法中。在原语的情况下,分配的内存将在堆栈上,并且对象为对象分配的内存将在堆上,并且该对象的地址将存储在堆栈中。至于你得到void*参数setArgument:atIndex:的错误似乎想要一个对象,而不是一个原始的。您是否尝试使用NSNumber代表布尔。 NSNumber附带了numberWithBool:方法。