ios - -retainCount 究竟有多不可靠?

标签 ios objective-c swift pool nsautoreleasepool

<分区>

我正在寻求创建一个不需要消费者手动释放对象的对象池。相反,每次请求新对象时,它都会检查池中的所有对象以查看它们的保留计数是否为 1(仅由池拥有)。如果是,则返回它。

要使这个总体计划发挥作用,需要多少技巧?

示例: 我知道某些无法释放的 NSString 的保留计数始终为 -1,并且无法释放标记的指针(我也不希望它们出现在对象中水池)。不属于基本集合的类(NSString、NSArray、NSDate 和其他一些),例如UIView,围绕保留的优化较少,因此保留计数更可靠?

最佳答案

retainCount它提供的信息是可靠的,但对于您所描述的用途也可能无用。

retainCount告诉您一个对象存在多少个保留项(大多数情况下,正如您所指出的,对于无法释放的对象有几个异常(exception))。但是,它没有告诉您这些保留的所有者是谁。特别是您不能使用它来确定这些现有保留中的任何一个是否是自动释放池的一部分。

  • 对象可能会报告 retainCount1但唯一保持分配状态的保留可能是自动释放池的一部分,该池将在当前运行循环结束时池耗尽时释放并因此解除分配。
  • 对象可能会报告 retainCount10但是您建议的对象池可能只有自动释放池之外的保留,因此在当前运行循环结束时它将返回到 1 .
  • 对象可能会报告 retainCount10但它们都可以从自动释放池中保留下来,并且在池耗尽时仍会被释放。

此外,从您的问题来看,您不清楚为什么您认为您需要这种行为。您通常可以将自动释放的对象返回给您的消费者。如果消费者打算重用它,则他们应该保留该对象,但是无论他们是否这样做,您的池都可以选择保留和重用该对象(或不)。

关于ios - -retainCount 究竟有多不可靠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42547649/

相关文章:

ios - 从头开始保存用户数据

ios - 更新 UITableViewCell

html - 无法在 swift 4 中加载本地 html 文件

ios - Realm 反向关系返回具有 nil 属性的对象

iphone - 带有框架、图标和图像的自定义 MKAnnotationView

swift - 如何在 Xcode 中使用设备边框为 App Store 制作屏幕截图?

用于在运行时识别 Metal 支持的 iOS 代码?

ios - 第二个动画 block 中不遵守动画选项/错误

ios - 在 iOS 上显示 Facebook Compose View 后显示 Twitter Compose View

objective-c - 双指针作为 Objective-C block 参数