我有一个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; }
希望这有帮助!