gpt4 book ai didi

objective-c - 使用双间接指针分配将项目转换为 ARC

转载 作者:搜寻专家 更新时间:2023-10-30 20:03:35 25 4
gpt4 key购买 nike

我正在尝试将项目转换为 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 不起作用。我也尝试过各种桥接 Actor 。我在这里遗漏了什么明显的东西吗?

有什么想法吗?

谢谢!

最佳答案

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

__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;

关于objective-c - 使用双间接指针分配将项目转换为 ARC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9582546/

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