我如何能实现一类/对象,有一堆非保留的参考id
的对象?
我想类似的东西是什么UIControl
/ NSControl
有: addTarget:(id)target action:(SEL)action ...;
(在我的情况,不过,我不需要UIControlEvents
部分)。 我想用这个目标/行动模式(最好远离委托模式走),但我需要确保添加到我的对象目标将不再保留或保留周期可能发生。
我想用我实现自己的数组malloc
/ free
,以确保目标不会保留将是一个解决方案,但所有这些麻烦闻起来像已经存在的地方实施的解决方案。 在那儿?
在OS X上,你可以创建一个NSPointerArray
将保持弱引用它的对象与+[NSPointerArray weakObjectsPointerArray]
或者(如果你想要一本字典)的NSMapTable
,它允许一个或两个键和值的要弱举行。
无论是那些目前可在iOS上,但核心基金会。 在任OS X或iOS可以使用CFArray
或CFDictionary
,传递NULL
的回调,使收集完成其包含的对象没有内存管理。 被警告,如果你尝试,如果他们自己的免费电话桥接可可同行使用这些,集合不能兑现您的非固定/非复制的愿望。 你将不得不使用CF功能与他们进行互动(或掀起一个包装类)。
您也可以在包装你的对象NSValue
S,使用valueWithNonretainedObject:
并把这些成可可集合( NSDictionary
/ NSarray
)。 收集将自己的价值,但价值不会拥有自己的对象。
您可以创建一个CFArrayRef
,指定不执行引用计数操作(或回调只是0,如果你感觉很懒惰)回调:
CFAllocatorRef allocator = 0;
const void **values = ...;
CFIndex numValues = ...;
const CFArrayCallBacks* const callBacks = 0;
CFArrayRef arr = CFArrayCreate(allocator, values, numValues, callBacks);