我有一个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;
谢谢,Carl Veazey!
答案 0 :(得分:2)
要在struct
中存储Objective-C对象,您有几个选项,我最常见的是将其作为__unsafe_unretained
存储在结构中,然后维护strong
在别处引用它。
来自"Common Issues While Converting a Project" section of the ARC Transition Notes:
如果使用Objective-C对象是次优的,(也许你想要一个密集的 这些结构的数组)然后考虑使用void *代替。这个 需要使用显式强制转换......
他们似乎暗示__bridge
是将void *
转变为id
的方式,但并非100%明确。
另一种选择,这对我个人而言更有意义,而且我经常看到我认为:
将对象引用标记为__unsafe_unretained。你宣布了 结构为:
struct x { NSString * __unsafe_unretained S; int X; }
希望这有帮助!