我正在将我的项目转换为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。这样做安全吗?或者还有另一种解决方法。
答案 0 :(得分:2)
ARC无法使用结构中的对象,有一个技术原因,但我总是忘记它,你可以使用__unsafe_unretained修饰符为结构中的那些元素禁用ARC但是你没有内存管理什么呢,甚至是你自己的。有一些私有函数可以保留和释放对象,但它们是私有的,所以你不能依赖它们,你可能会遇到苹果应用商店的麻烦。处理此问题的最佳方法是为具有对象元素结构的.m文件转换ARC(在这些文件上使用-fno-objc-arc),然后手动为该文件中的所有内容管理所有内存管理。您可以使用类别来减少手动引用计数所需的代码量,您可以为类文件关闭ARC,然后为其中一个类别启用ARC。