代码:
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
BOOL initial = YES;
[invocation setArgument:&initial atIndex:2];
问题:
是否可以在不创建临时变量的情况下将YES
传递给setArgument:atIndex:
?
我在想,也许有一种语言结构,我在运行时并不知道和/或不变,我总是可以指出YES
。
谢谢!
答案 0 :(得分:6)
不,没有任何干净,可靠的方式。
NSInvocation将取消引用您发送它的任何指针,并复制方法签名指定的长度数据。您需要在某处获取该信息,以便获取地址,并且拥有本地变量是最好的方法。
答案 1 :(得分:0)
指针必须指向某些东西(包括垃圾)或什么都没有(意味着指针被初始化为NULL)。指针是对象的间接引用。如果指针没有指向这样的对象,则可能不需要指针。您只需致电setArgument:NULL atIndex:2
。
在代码中使用类似指针的情况是传递输出参数,其值将在您调用的函数中设置,在这种情况下,您可能不需要要在将参数传递给函数之前初始化该函数,该函数应该负责为其分配正确的值。
所以在你的情况下,如果你不打算使用输出参数,你只需要将原语BOOL传递给函数,不需要指针。
修改强>
我刚刚看了一下NSInvocation的文档。答案与其他人一样,没有。
您必须传递一个指针,必须指向现有对象才能使NSInvocation正常工作。
答案 2 :(得分:0)
答案是否定的。指针必须指向内存中的地址。首先,您必须分配该内存,然后将该分配的内存的地址发送到该方法中。在原语的情况下,分配的内存将在堆栈上,并且对象为对象分配的内存将在堆上,并且该对象的地址将存储在堆栈中。至于你得到void*
参数setArgument:atIndex:
的错误似乎想要一个对象,而不是一个原始的。您是否尝试使用NSNumber
代表布尔。 NSNumber
附带了numberWithBool:
方法。