我有一个方法,它接受以下参数。
void callAMethood(const void *iVar){}
现在我不清楚我应该怎么指点
下面看起来很简单,我只是传递地址而不是值。
NSString *a=@"Hi";
callAMethood(&a);
但是,下面的似乎工作得很好,但理解语法很困难。
char const * const a="HI";
callAMethood(&a);
甚至这样也可以 callAMethood(a);
最佳答案
正如 xlc 所指出的,两者都是错误的。
NSString *a=@"Hi";
callAMethood(&a); // This passes a NSString **
char const * const a="HI";
callAMethood(&a); // This passes a char const * const *
两者都有效,因为指向指针的指针仍然可以转换为 void *
。
不过,您不太可能有意。
利用 C 在编译时进行类型检查的优势,并使您的类型更加具体。
void awesome_function(NSString *amazingString);
NSString *yay = @"oh my god yes";
awesome_function(yay); // ok
awesome_function(&yay); // compiler error
简而言之:除非您有充分的理由使用 void *
(我认为对于 Cocoa(Touch) 应用来说不太可能),否则不要这样做。
如果您不想进行编译时类型检查,请使用 Python 之类的工具。如果您希望能够处理不同的 Objective C 对象类型,这就是 id
的用途。
关于ios - 指针传递 Objective C 或 C 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17078054/