2

我正在尝试将 iOS 项目转换为 ARC。

我正在为某些文件使用编译器标志。

但是其中一个文件包含在如下方法中声明的变量:

aClass **obj;

关闭 ARC 后,会出现错误:

“指向没有明确所有权的非常量类型的指针”

我可以通过这样做使警告静音:

aClass *__strong* obj;

就所有权而言,我认为这不是一个好的做法。

但在非ARC环境中不存在该错误。

我的问题很简单如下:

我如何从非 ARC 更改为 ARC 设置对象的声明而不必使用*__strong*

即,我怎样才能在 ARC 下声明(或更改声明)aClass **obj而不必使用*__strong*,我确信我已经在某处读过它不是一个好习惯,但我忘记了我在哪里读过它。

和:

为什么在非ARC环境下不报错。

4

1 回答 1

0

TL;DR:除非可以避免,否则您可能不想要指向指针的指针。在为您管理内存的系统下这样做是非常糟糕的设计。这个答案解释了更多:指向objective-c中的指针的指针?.

更多细节

在非 ARC 下,系统将保留/释放留给您,因此谁拥有指针并不重要。你,程序员,拥有它。在 ARC 领域,系统需要知道何时保留或释放,并且它不能总是推断出哪个类/对象对特定对象拥有所有权。其他类可能需要引用,但声明它的类已经使用对象完成。基本上,__strong告诉声明类它应该负责管理指针。它以某种方式“覆盖”指针的所有权。所以这是一种绕过它的方法。解决它的最佳方法是重构代码以不使用显式管理的内存,但如果这不可能/太难,你如何修复它将会起作用。

于 2014-07-03T18:04:15.997 回答