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 *' with an rvalueof type '__strong id *'

Web で検索したところ、おそらく__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 に答える