gpt4 book ai didi

objective-c:依赖dealloc

转载 作者:搜寻专家 更新时间:2023-10-30 20:10:08 28 4
gpt4 key购买 nike

依赖确定性 dealloc(例如:用于清理)是否合法?

由于 ARC,甚至手动引用计数,本质上是确定性的,我想知道其他人如何看待依赖立即调用 dealloc(相对而言,考虑 autoreleasepool)。

在其他现代编程语言(如 C#)中,当您需要确定性清理时,会采用类似处置的模式。而且我认为带有垃圾收集功能的 Obj-C 也会鼓励这种行为。

因此,话虽如此,一个例子是 UIViewController,它取消了 dealloc 中未完成的操作,而不是试图围绕 viewDidDisappear 有时令人沮丧的语义进行编程。

另一个例子是一个流对象,它分别在 init 和 dealloc 中隐式打开和关闭,而不需要调用 open 或 close。

由于 Apple 已经弃用了 GC,我想这些模式不会很快被打破,而且它们非常方便,尽管我找不到任何关于是否应该鼓励这样做的文档。

最佳答案

你是绝对正确的,你可以依靠 dealloc 在最后一个引用被释放后相对较快地被调用(手动或通过 ARC,这无关紧要)。与 GC 在系统有空闲时间时调用终结器或在某些情况下从不调用终结器不同,dealloc 的调用非常可靠。 Apple 通过建议我们应该在 dealloc 中执行所有资源清理任务来允许甚至鼓励使用这种模式。

然而,这并不意味着您应该完全依赖 dealloc。例如,看看 NSStream类:它为您提供了一个明确的close 方法,让您可以随意强制关闭流,而无需等待dealloc 的调用发生。如果资源非常昂贵(文件句柄、信号量等),这是一个非常好的模式:释放这些资源的主要机制应该是一个单独的 close 方法。 dealloc 方法也应该释放资源,但它也应该发出警告,通知您错过了 close 调用。

关于objective-c:依赖dealloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13638325/

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