Ios 非圆弧到圆弧:指向对象(**)指针的指针

Ios 非圆弧到圆弧:指向对象(**)指针的指针,ios,objective-c,automatic-ref-counting,double-pointer,Ios,Objective C,Automatic Ref Counting,Double Pointer,我正在尝试将iOS项目转换为ARC 我正在对一些文件使用编译器标志 但其中一个文件包含在方法中声明的变量,如下所示: aClass **obj; 关闭ARC后,会出现错误: “指向无显式所有权的非常量类型的指针” 我可以通过这样做来消除警告: aClass *__strong* obj; 就所有权而言,我认为这不是一个好的做法 但在非ARC环境下不存在误差 我的问题如下: 如何在不必使用*\uu strong*的情况下,将对象的声明从非圆弧设置更改为圆弧设置 i、 例如,我如何在ARC下声明

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

我正在对一些文件使用编译器标志

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

aClass **obj;
关闭ARC后,会出现错误:

“指向无显式所有权的非常量类型的指针”

我可以通过这样做来消除警告:

aClass *__strong* obj;
就所有权而言,我认为这不是一个好的做法

但在非ARC环境下不存在误差

我的问题如下:

如何在不必使用
*\uu strong*
的情况下,将对象的声明从非圆弧设置更改为圆弧设置

i、 例如,我如何在ARC下声明(或更改声明)
aClass**obj
,而不必使用
*\uu strong*
,我确信我在某个地方读过这不是一个好的做法,但我忘了在哪里读过它

以及:


为什么在非ARC环境下没有给出错误。

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

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

一些上下文将很有帮助。分配给变量的内容、使用位置/方式、范围、生存期等@MartinR它在一个方法中声明,然后作为参数传递给另一个方法。这不是我写的。我手头没有代码,否则我肯定会发布更多。但我的记忆是有效的。它在一个方法中声明,然后作为参数传递给另一个方法。谢谢。双指针被传递到另一个方法,或者对象是?另一个方法设置变量了吗?它最初设置在哪里?在另一个方法返回后,你用它做什么?我没有投反对票,但这确实是一个糟糕的答案,我认为,这是由于对内存管理的理解不够,以及需要指针指向指针的时候。把你不理解的东西称为“非常糟糕的设计”很可能是你被否决的原因。