2

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

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

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

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

    char *CreateStmt;
} grade;

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

4

1 回答 1

2

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

于 2013-03-18T06:27:45.547 回答