3

我正在尝试将项目转换为 ARC。该项目有一个有向无环字图,这基本上意味着到处都有很多双间接指针。

事实证明,转换为 ARC 是一项相当大的挑战,尤其是一个问题让我目前感到困惑。

这是场景。

假设你有一个NSString *

NSString *b = [[NSString alloc] initWithString:@"hello"];

您还有一个双重间接类型:

__unsafe_unretained NSString **a;

您想将一个分配给另一个,如下所示:

    a = &b;

这给出了一个转换错误:

error: assigning 'NSString *__strong *' to 'NSString *__unsafe_unretained *' changes retain/release properties of pointer

更改b__unsafe_unretained不起作用。我也尝试过各种桥接演员。我在这里遗漏了一些明显的东西吗?

有任何想法吗?

谢谢!

4

1 回答 1

5

您可以使用指向常量指针的指针来避免内存管理问题:

__attribute__((objc_precise_lifetime)) NSString *b = [[NSString alloc] initWithString:@"hello"];
NSString *const*a;
a = &b;

您需要使用 objc_precise_lifetime 使b整个上下文可用(ARC 可能会b在最后一次引用后发布)

编辑:这也可以使用(但要注意管理你的双指针)

NSString *b = [[NSString alloc] initWithString:@"hello"];
NSString *__strong*a;
a = &b;
于 2012-03-06T11:32:17.430 回答