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

时间:2018-01-25 04:25:17

标签: c++ objective-c

具有Objective-C ++功能。 (该文件具有正确的.mm扩展名。)

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

一些代码调用如下:

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

编译抱怨:

  

没有匹配函数调用'SPGetNameAttribute'。

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

1 个答案:

答案 0 :(得分:0)

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

__autoreleasing NSString* queryAttr = nil;

或者您可以将您的功能声明为

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

并且强变量的错误消失了。使用Instruments进行的测试表明,ARC似乎也正在处理这个问题。但是,您可能只对此参数使用强变量。

我认为如果你改用指针会更好:

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