如何在Structure中使用__unsafe_unretained

时间:2013-03-18 06:04:57

标签: iphone ios objective-c xcode

我正在将我的项目转换为ARC
我在我的项目中使用结构。
转换成ARC时给出了错误

ARC forbids Objective-C objects in structs or unionsrk - type definition for struct

我在SO中搜索,我发现使用__unsafe_unretained。它将解决问题。所以我在我的结构中使用它。

typedef struct Grade{
  __unsafe_unretained NSString  *Table,
                                *RowId,
                                *ScheduleID,
                                *Level,
                                *Label,
                                *Thershold;

    char *CreateStmt;
} grade;

它正在运行,但现在它在*RowId的下一行显示相同的错误。
我的问题是我应该在所有变量之前放置__unsafe_unretained。这样做安全吗?或者还有另一种解决方法。

1 个答案:

答案 0 :(得分:2)

ARC无法使用结构中的对象,有一个技术原因,但我总是忘记它,你可以使用__unsafe_unretained修饰符为结构中的那些元素禁用ARC但是你没有内存管理什么呢,甚至是你自己的。有一些私有函数可以保留和释放对象,但它们是私有的,所以你不能依赖它们,你可能会遇到苹果应用商店的麻烦。处理此问题的最佳方法是为具有对象元素结构的.m文件转换ARC(在这些文件上使用-fno-objc-arc),然后手动为该文件中的所有内容管理所有内存管理。您可以使用类别来减少手动引用计数所需的代码量,您可以为类文件关闭ARC,然后为其中一个类别启用ARC。