我正在寻找一个不需要消费者手动放开对象的对象池。相反,每次要求新对象时,它都会检查池中的所有对象,以查看它们的保留计数是否为1(仅由池拥有)。如果是,则返回它。
要使这项总体计划有效,需要多少次黑客攻击?
示例:我知道一些无法释放的NSStrings总是有一个保留计数为-1,并且标记的指针不能被释放(我也不希望它们在一个对象中池)。类不是基本集(NSString,NSArray,NSDate和其他一些)的类,例如UIView,对保留的优化较少,因此在保留计数方面更可靠?
答案 0 :(得分:3)
retainCount
对于它提供的信息是可靠的,但对于您所描述的用途也可能没用。
retainCount
告诉您对象存在多少个保留(大多数情况下,正如您所指出的那样,对于无法解除分配的对象有几个例外)。但是,它没有告诉您这些保留的所有者是谁。特别是,您无法使用它来确定这些现有保留是否属于自动释放池。
retainCount
1
,但保留它的唯一剩余保留可能是自动释放池的一部分,该池将释放并因此在池结束时释放它并因此解除分配。当前的运行循环。retainCount
10
,但您建议的对象池可能只保留在自动释放池之外,因此在当前运行循环结束时它将返回{{1 }}。1
retainCount
,但它们都可以从自动释放池中保留,当池耗尽时,它仍会被释放。除了你的问题之外,还不清楚为什么你认为你需要这种行为。您通常可以将自动释放的对象返回给您的消费者。如果对象打算重用它,则应保留该对象,但无论它们是否这样做,您的池都可以选择保留并重用该对象(或不)。