1

私はNSStringを持っています。

NSString *str;

そして、それを構造体に格納する必要があります。

struct {
  int *s;
} st;

そして、それを設定します。

st.s = str;

では、どのように取得すればよいのでしょうか。

return (__bridge_retained NSString *)st.s;

上記を試しましたが、次のエラーが表示されます: Incompatible types casting 'int *' to 'NSString *' with a __bridge_retained cast.


質問に答えた。このように構造体で NSString を定義するだけです。

struct {
  __unsafe_unretained NSString *s;
} st;

ありがとう、カール・ヴィージー!

4

1 に答える 1

3

Objective-C オブジェクトを に格納するstructには、いくつかのオプションがあります。私が最もよく目にするのは、それを struct as に格納し、それへの参照を別の場所に__unsafe_unretained保持することです。strong

ARC移行ノートの「プロジェクトを変換する際の一般的な問題」セクションから

Objective-C オブジェクトの使用が最適ではない場合 (おそらく、これらの構造体の密な配列が必要な場合) は、代わりに void* の使用を検討してください。これには、明示的なキャストを使用する必要があります...

__bridge彼らはキャストvoid *する方法を暗示しているようですがid、これについては 100% 明確ではありません。

個人的にはより理にかなっていて、より頻繁に見たもう1つのオプションは、次のように思います。

オブジェクト参照を __unsafe_unretained としてマークします。...構造を次のように宣言します。struct x { NSString * __unsafe_unretained S; int X; }

お役に立てれば!

于 2012-10-05T00:36:24.540 に答える