1

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

需要什么才能将数组对象复制到向量中?

4

1 回答 1

3

我通过这样做让我的代码工作;

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

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

于 2012-12-02T23:48:36.073 回答