将 (NSString *) 转换为 (int *)



我有一个NSString。

NSString *str;

我需要将其存储在结构中。

struct {
  int *s;
} st;

并设置它。

st.s = str;

那么,我应该如何检索它呢?

return (__bridge_retained NSString *)st.s;

我已经尝试了上述方法,它给出了错误:不兼容的类型使用__bridge_retained转换将"int *"转换为"NSString *"。


回答了问题。只需像这样在结构中定义 NSString。

struct {
  __unsafe_unretained NSString *s;
} st;

谢谢,卡尔·维泽!

要将 Objective-C 对象存储在struct中,您有几个选项,我看到最多的是将其作为__unsafe_unretained存储在结构中,然后在其他地方维护对它的strong引用。

从 ARC 转换说明的"转换项目时的常见问题"部分:

如果使用 Objective-C 对象是次优的,(也许你想要一个密集的 这些结构的数组),然后考虑改用 void*。这 需要使用显式强制转换...

他们似乎暗示__bridge是将void *投射到id的方式,但对此并非 100% 清楚。

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

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

希望这有帮助!

最新更新