gpt4 book ai didi

ios - 使用 Arc 不保留函数参数?

转载 作者:行者123 更新时间:2023-11-28 19:05:15 25 4
gpt4 key购买 nike

编辑:这是针对静态 NSMutableDictionary,而不是类成员。我看到很多答案认为它是类(class)成员,对此感到抱歉。感谢您的快速回复。

我有一段有效的代码,但它被使用了 2 次,所以我写了一个方便的函数:

- (void) initializeDictionary:(NSMutableDictionary*)mutableDict fromPathName:(NSString*)path
{
mutableDict = // get from file, init if not there.
}

然后我注意到没有任何保存。单步执行代码,该函数创建了一个字典,但返回时“传入”的值仍然为 nil。这完全颠覆了我对指针的理解(不要误会,我很舒服)。但我想,它们的目的是让你“传递地址”,这样我就可以为它指向的东西添加水分。

由于 mutableDict 是“值副本”,ARC 似乎正在将其清除。我在这里问是因为

  1. 其他问题有相反的问题“为什么要保留这个?”和
  2. 这似乎不对。您使用任何指针语言的第一个教程是“这样您就可以弄乱原始值”。 Arc 真的这样做吗?有没有我不明白的概念?

当然,我可能忽略了一些简单的事情。

我似乎已经通过在别处找到的写回技巧解决了这个问题:

- (void) initializeDictionary:(NSMutableDictionary* __strong *)mutableDictionary fromPath:(NSString*)path;

并使用 & 调用和 * deref 更改值。它似乎远不够优雅。

最佳答案

你传递了一个 NSDictionary 的指针。如果您更改 mutableDict 的指针值(通过分配或赋值),这将不会反射(reflect)在作为此函数参数传递的变量上,并且由于 mutableDict 是在函数中本地定义的,它将由 释放>ARC 自动。 (不要忘记,即使对于指针,地址在传递给函数时也会被复制)。

您的第二个解决方案之所以有效,是因为您将指针传递给了指针(不确定那里是否需要 strong )。 *mutableDict 的值将反射(reflect)在外部,因为您更新了 mutableDict 指向的地址中的值。该值是您分配的字典的地址,由于您通过指针更改它,它将反射(reflect)在函数外部。

关于ios - 使用 Arc 不保留函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21016877/

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