gpt4 book ai didi

cocoa-touch - 有未保留的 id 对象列表吗?

转载 作者:行者123 更新时间:2023-12-03 16:52:39 27 4
gpt4 key购买 nike

如何实现一个类/对象,该类/对象引用了一堆非保留的 id 对象?

我想要类似于 UIControl/NSControl 的内容:addTarget:(id)target action:(SEL)action ...; (不过,就我而言,我不需要 UIControlEvents 部分)。我想使用此目标/操作模式(最好远离委托(delegate)模式),但为此我需要确保添加到我的对象中的目标不会被保留,否则可能会发生保留循环。

我认为使用 malloc/free 实现我自己的数组以确保目标不被保留将是一种解决方案,但所有这些麻烦闻起来就像已经有一个解决方案在某处实现。有吗?

最佳答案

在 OS X 上,您可以创建一个 NSPointerArray,它将使用 +[NSPointerArray weakObjectsPointerArray] 保留对其对象的弱引用。 ,或者(如果你想要字典)NSMapTable它允许键和值中的一个或两个被弱保留。

这些目前在 iOS 上都不可用,但 Core Foundation 可以。在 OS X 或 iOS 上,您可以使用 CFArrayCFDictionary,为回调传递 NULL 以使集合对其包含的内容不进行内存管理对象。请注意,如果您尝试将它们当作免费桥接 Cocoa 对应项来使用,则该集合将不会满足您的非保留/非复制愿望。您必须使用 CF 函数与它们交互(或创建一个包装类)。

您还可以使用 valueWithNonretainedObject: 将对象包装在 NSValue 中。 ,并将它们放入 Cocoa 集合中 (NSDictionary/NSarray)。集合将拥有该值,但该值不会拥有其对象。

关于cocoa-touch - 有未保留的 id 对象列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11928730/

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