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

标签 c++ objective-c

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

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

部分代码调用如下:

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

编译器提示:

No matching function call for 'SPGetNameAttribute'.

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

最佳答案

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

__autoreleasing NSString* queryAttr = nil;

或者您可以将函数声明为

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

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

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

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

关于c++ - 将 NSString* 传递给 C++ 引用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48435676/

相关文章:

ios - Objective-C指针类型的隐式转换 'dispatch_source_t'

objective-c - iOS 和 ARC : How to retain self during asynchronous operations?

c++ - 在 Mac OSX 中模拟 ioquake3 的按键事件

c++ - 在我自己的堆栈中实现 top 的问题

objective-c - Cocoa/Objective-C NSButton 事件处理?

iphone - 用图像覆盖 MKMapView

ios - 如何垂直对齐(居中)UITableView 的内容?

c++ - 计算两个骰子的和出现的次数

c++ - 在 C++ 中通过 tcp/ip 协议(protocol)发送 .txt 文件

c++ - 重载来自不同基类的同名虚函数。可能吗?