将 NSString* 传递给C++引用参数



有一个Objective-C++函数。(该文件具有正确的 .mm 扩展名)。

int SPGetNumericAttribute(NSMutableString* line, NSString* &attr) {...}

一些代码调用如下所示:

NSString* queryAttr = nil;
int res = SPGetNameAttribute(line, queryAttr); <-- error

编译器抱怨:

没有匹配的函数调用"SPGetNameAttribute"。

是否有技术原因导致您无法将 Objective-C 对象传递给C++引用参数? 我的猜测与ARC有关。

ARC 需要知道如何处理函数内部第二个参数的引用计数。默认情况下,该参数具有自动释放类型。因此,您的变量queryAttr必须具有自动释放 ARC 类型

__autoreleasing NSString* queryAttr = nil;

或者,您可以将函数声明为

int SPGetNumericAttribute(NSMutableString* line, NSString* __strong &attr) { ... }

并且强变量的误差消失。仪器测试表明,ARC似乎也在正确处理这个问题。但是,您只能对此参数使用强变量。

我认为如果您使用指针,应该会更好:

int SPGetNumericAttribute(NSMutableString* line, NSString** attr) { ... }

最新更新