4

对于具有与非内存资源相关的某些状态的对象,通常会提供一种方法来显式地“完成”该资源。是否有首选的常见做法来处理仍处于“使用我的资源”状态时尝试释放对象的情况?我已经看到了几种不同的方法:

  1. 记录程序员犯了一个错误并告诉他们如何调试它(NSLock这样做)
  2. 让调用者选择资源是由调用者管理还是在释放时放弃(例如NSFileHandle
  3. 如果对象未处于预期的最终状态,则引发异常,即断言程序员不会以这种方式使用我的对象
  4. 出门时总是打扫卫生。

GC 文档确认与内存管理一起管理其他资源是一个坏主意,并且(但)提供了一个执行 4 的示例,尽管有一些警告。那么有没有人“选择”了一种始终遵循的方法?

4

1 回答 1

1

由于大多数 Cocoa 框架对象早于垃圾回收,因此您不能假设 NSFileHandle 是最好的方式。我认为这个问题是我们希望为每个场景都遵循一种模式并省去我们做出选择的麻烦的众多问题之一。不幸的是,我认为这是不可能的。您将不得不根据具体情况确定最好的方法。

以下是选择任何选项的理由:

  1. 如果自动清理相当安全,但程序确实应该手动进行。
  2. 如果您正在编写一个库,并且该资源可能属于或不属于您的对象。
  3. 如果无法进行自动清理或存在某种风险。
  4. 如果自动清理是微不足道的,不值得打扰任何人手动进行。
于 2008-10-13T06:38:40.097 回答