无法使用ARC将NSArray复制到std :: vector

时间:2012-12-02 06:40:13

标签: nsarray automatic-ref-counting stdvector

我正在尝试使用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

数组对象可以复制到向量中需要什么?

1 个答案:

答案 0 :(得分:3)

我通过这样做得到了我的代码;

std::vector<__unsafe_unretained id> buffer(array.count);
[array getObjects:&buffer[0] range:NSMakeRange(0, array.count)];

向量是方法内堆栈上的本地对象,因此它超出范围而不需要保留数组元素