gpt4 book ai didi

ios - 非 ARC 到 ARC : Pointer to a pointer to an object (**)

转载 作者:行者123 更新时间:2023-12-02 07:43:32 25 4
gpt4 key购买 nike

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

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

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

aClass **obj;

关闭 ARC 后,会出现错误:

"pointer to non-const type without explicit ownership"

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

aClass *__strong* obj;

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

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

我的问题简单如下:

如何在不使用 *__strong* 的情况下将对象声明从非 ARC 更改为 ARC?

即,我如何在 ARC 下声明(或更改声明)aClass **obj 而不必使用 *__strong*,我确信我已经使用了在某个地方读过这不是一个好习惯,但我忘记了我在哪里读到的。

还有:

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

最佳答案

TL;DR: 你可能不想要一个指向指针的指针,除非你能避免它。在为您管理内存的系统下这样做是非常糟糕的设计。这个答案解释了更多:Pointer to a pointer in objective-c?

更多详细信息

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

关于ios - 非 ARC 到 ARC : Pointer to a pointer to an object (**),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24559984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com