gpt4 book ai didi

objective-c - objective-c 中的悬垂指针 - nil 是否也释放内存?

转载 作者:太空狗 更新时间:2023-10-30 03:31:58 28 4
gpt4 key购买 nike

我的理解是:

当内存没有被释放或“释放”时发生内存泄漏当指针未设置为 nil 且对象已释放时,会出现悬空指针。

我的问题是:将对象设置为 nil 可以释放内存并清除指针引用吗?

Car *myCar = [[Car alloc] initWithCoolRims: YES];
myCar = nil;
//no mem leaks or dang pointers

或者 ARC 是否这样做:

Car *myCar = [[Car alloc] initWithCoolRims: YES];
[myCar release];
myCar = nil;
//no mem leaks or dang pointers

谢谢

最佳答案

ARC

对于您的第一个示例,myCar 将被设置为 nil 并且新创建的 Car 将在某个时候被释放。这是因为 myCar 是唯一引用您新创建的 Car 的东西。

如果其他东西有一个指向新创建的 Car 的强指针,那么这将简单地 nilmyCar 的引用和其他感兴趣的引用将决定 Car 实例的生命周期

非ARC

人们仍然这样做吗?

您的第一个示例确实是内存泄漏 - 您丢失了指向新 Car 实例的唯一指针,而没有从 alloc 中递减 +1 引用。

关于objective-c - objective-c 中的悬垂指针 - nil 是否也释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20873253/

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