0

次のコードがある場合:

// objective C++ code .mm
id<MTLTexture> texture = ...;
void* ptr = (void*)CFBridgingRetain(texture);
share_ptr_with_native_code(ptr);
[texture do_stuff]; // is this valid?

// native code .cpp
void share_ptr_with_native(void* ptr)
{
  ptr->do_stuff();
  CFBridgingRelease(ptr);
}

?textureへの呼び出し後、ARC によって再び有効になり、保持されshare_ptr_with_native()ます。

4

2 に答える 2

2

コード スニペットのさまざまなエラーを除いて、はい、問題の行は有効です。objectARC は、あなたが担当するコードに加えて、トップ コードでまだ使用されている間、独自の強力な参照を維持し続けます。CFBridgingRetain()オブジェクトの保持カウントに +1 の効果があるため、名前に「保持」が含まれています。

于 2018-03-02T04:23:55.983 に答える