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

时间:2012-10-05 00:16:38

标签: objective-c pointers casting struct nsstring

我有一个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!

1 个答案:

答案 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; }

希望这有帮助!