我正在尝试使用Objective-C ++将NSArray的内容复制到使用自动引用计数的项目中的std :: vector中。 当我这样写:
NSArray* array;
...
std::vector<id> buffer;
buffer.reserve(array.count);
[array getObjects:&buffer[0] range:NSMakeRange(0, array.count)];
对getObjects:range:
的调用导致此错误:
Cannot initialize a parameter of type '__unsafe_unretained id *
'rvalue
类型'__strong id *
'
网上的一些搜索表明可能需要__bridge
演员。使用此代码:
[array getObjects:(__bridge id*)&buffer[0] range:NSMakeRange(0, array.count)];
导致此错误:
Incompatible types casting '__strong id *' to '__strong id *' with a __bridge cast
数组对象可以复制到向量中需要什么?
答案 0 :(得分:3)
我通过这样做得到了我的代码;
std::vector<__unsafe_unretained id> buffer(array.count);
[array getObjects:&buffer[0] range:NSMakeRange(0, array.count)];
向量是方法内堆栈上的本地对象,因此它超出范围而不需要保留数组元素