gpt4 book ai didi

objective-c - 玩弄 ARC : Force release irritation?

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

在开始实际工作之前,我目前正在尝试使用 ARC 来弄清楚一些事情。我确实设置了这段代码:

NSNumber* n = [[NSNumber alloc] initWithInt:3];
__weak NSNumber* weakN = n;
n = nil;
NSLog(@">>>: %@ %@", n, weakN);

我预计 n 和 weakN 为 nil,因为 n = nil;应该触发我眼中的释放?不幸的是它没有。输出是“>>>: (null) 3”。我在这里缺少什么?

另一件事是,我很确定,下面的代码让我在开始使用 arc 时遇到了困难:

__weak NSNumber* weakN2 = [[NSNumber alloc] initWithInt:3];
NSLog(@">>>: %@", weakN2);

我很确定,我在使用类似代码时遇到过一些问题,因为 arc 会在初始化后立即释放对象,因为没有对该对象的强引用。不幸的是,上面的输出是“>>>: 3”。

如果能得到一些关于这些内容的说明,那就太好了。我显然在这里遗漏了一些东西!

最好的问候,迈克尔

最佳答案

除了 kevboh 所说的,创建对简单的不可变 Foundation 对象(如 NSNumber)的弱引用也是毫无意义的。出于性能原因,Foundation 可能会向您提供一个缓存的对象,而不是创建一个全新的对象。如果现在没有,那么它可能会在未来的某个版本中出现。

结果是,无论您怎么想,您可能都不是 [[NSNumber alloc] initWithInt:3] 返回对象的唯一所有者。

关于objective-c - 玩弄 ARC : Force release irritation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10669448/

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