1

我有一个 NSString。

NSString *str;

我需要将它存储在一个结构中。

struct {
  int *s;
} st;

并设置它。

st.s = str;

那么,我应该如何去找回它呢?

return (__bridge_retained NSString *)st.s;

我已经尝试了上述方法,它给出了错误: Incompatible types cast '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% 清楚。

另一种选择,这对我个人来说更有意义,而且我经常看到我认为:

将对象引用标记为 __unsafe_unretained。...您将结构声明为:struct x { NSString * __unsafe_unretained S; int X; }

希望这可以帮助!

于 2012-10-05T00:36:24.540 回答