gpt4 book ai didi

objective-c - Swift 数组会保留它们的元素吗?

转载 作者:搜寻专家 更新时间:2023-10-31 22:20:15 26 4
gpt4 key购买 nike

我正在移植我的 objective-c 框架的一部分,其中我有用于观察目的的自定义 MyNotificationCenter 类。

该类有一个 NSArray 类型的属性,其中包含所有对通知感兴趣的可观察对象。

在 objective-c 中,一个数组会保留它的元素,这是不需要的,因为当中心试图通知他时观察者可能已经不存在了,而你不希望有保留周期。

因此我使用了这段代码,它保留了数组中的所有项目而不保留它们:

_observers = CFBridgingRelease(CFArrayCreateMutable(NULL, 0, NULL)); 

我知道 Swift 是一个不同的野兽,但是 Swift 中有这样的概念吗?

最佳答案

是的,Swift 中的 Array 对象保留其元素。来自Apple Documentation :

Swift’s Array type is bridged to Foundation’s NSArray class.

因此它具有与 NSArray 相同的行为。

阅读您的 ObjectiveC 代码,您想要实现的是拥有一个不保留元素的类似 NSArray 的类。这也可以通过使用 NSHashTable 的另一种方式实现。 :

NSHashTable *array = [NSHashTable weakObjectsHashTable];

NSHashTable 与普通的 NSSet 具有几乎相同的接口(interface)(NSHashTable 是在 NSSet 之后建模的),因此您应该能够用 NSHashTable 值替换您的 NSArray 值并进行一些小的更改。

关于objective-c - Swift 数组会保留它们的元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40111346/

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