gpt4 book ai didi

objective-c - 对 ARC 下对象的弱引用 (__unsafe_unretained) 的 NSArray

转载 作者:IT老高 更新时间:2023-10-28 11:26:17 31 4
gpt4 key购买 nike

我需要在 NSArray 中存储对对象的弱引用,以防止保留循环。我不确定要使用的正确语法。这是正确的方法吗?

Foo* foo1 = [[Foo alloc] init];
Foo* foo2 = [[Foo alloc] init];

__unsafe_unretained Foo* weakFoo1 = foo1;
__unsafe_unretained Foo* weakFoo2 = foo2;

NSArray* someArray = [NSArray arrayWithObjects:weakFoo1, weakFoo2, nil];

请注意,我需要支持 iOS 4.x,因此使用 __unsafe_unretained 而不是 __weak


编辑(2015-02-18):

对于那些想要使用真正的 __weak 指针(不是 __unsafe_unretained)的人,请查看以下问题:Collections of zeroing weak references under ARC

最佳答案

正如 Jason 所说,你不能让 NSArray 存储弱引用。实现 Emile 的建议的最简单的方法是:将一个对象包装在另一个存储弱引用的对象中:

NSValue *value = [NSValue valueWithNonretainedObject:myObj];
[array addObject:value];

另一个选项:category这使得 NSMutableArray 可以选择性地存储弱引用。

请注意,这些是“不安全的未保留”引用,而不是自归零弱引用。如果在对象被释放后数组仍然存在,你就会有一堆垃圾指针。

关于objective-c - 对 ARC 下对象的弱引用 (__unsafe_unretained) 的 NSArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9336288/

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