gpt4 book ai didi

objective-c - 我真的需要 atexit_b 吗?

转载 作者:太空宇宙 更新时间:2023-11-04 03:55:25 25 4
gpt4 key购买 nike

我有很多这样的方法:

-(NSObject *)theObject
{
static NSObject *obj = nil;
static dispatch_once_t onceToken = 0;
dispatch_once(&onceToken, ^{
obj = [[NSObject alloc] init];
atexit_b (^{
[obj release], obj = nil;
});
});
return obj;
}

我认为使用 atexit_b 的最初目的是做一个好公民,并在应用程序结束前释放使用的内存 :)。但是,据我所知,无论如何,当我的应用程序退出(或终止等)时,运行时将重新收集所有内存。

我可以一直这样假设吗?还是取决于操作系统/运行时/某些实现?

在我的特殊情况下,我在应用程序周围有几个(比方说几十个)atexit_b 调用,所以这意味着一些内存被用来做一些不需要的事情。

这是真的吗?如果是这样,是否意味着我不需要 atexit_b 调用?

最佳答案

据我所知,使用 atexit_b() 有两个主要原因;

  • 您需要清理/同步不一定可以终止的资源。作为一个“极端”的例子,如果你正在控制一个机器人,你可能想在终止程序之前强制它停止移动。文字处理器可能希望确保保存的文件处于一致状态。当然,可能还有其他更安全的方法来实现这一点。

  • 您需要清理半独立的资源以按特定顺序执行。 atexit_b() 以与注册相反的顺序清理,因此如果您需要步进电机在旋转电机断电之前停放硬盘磁头,您可以使用它。

在您的情况下,删除它应该同样安全,除非另一个清理方法依赖 theObject 在清理期间返回 null。

关于objective-c - 我真的需要 atexit_b 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16829478/

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