gpt4 book ai didi

iphone - 正确[ super dealloc]

转载 作者:行者123 更新时间:2023-12-03 18:25:19 25 4
gpt4 key购买 nike

dealloc 方法中语句的顺序重要吗? [super dealloc] 是否需要位于方法的顶部?这有关系吗?

也可以在例如viewDidLoad[super viewDidLoad] 应该位于方法的顶部吗?

最佳答案

绝对很重要。

您的操作取决于您使用的是自动引用计数 (ARC) 还是手动引用计数。

使用手动释放-保留

手动释放保留 (MRR) 是 Mac OS X 所有版本的默认内存管理方式,也是 Xcode 4.2 之前处理内存的唯一方法。

使用 MRR,[super dealloc] 应位于方法的末尾

所以你的代码应该是这样的:

- (void)dealloc
{
[member release];
[super dealloc];
}

super dealloc实际上释放了内存。考虑一下。如果您之后访问实例变量,如下所示:

[super dealloc];
[member release];

...这意味着实例变量可能无效。在调用 super dealloc 和调用 member release 之间,理论上存储成员指针的字节可能已更改为其他内容!

正如 Apple 在 Memory Management Programming Guide 中所解释的那样:

The role of the dealloc method is to free the object's own memory, and dispose of any resources it holds, including ownership of any object instance variables.

您可以通过处置对象持有的所有资源并调用[super dealloc]来实现此目的。它处理它持有的任何对象,并调用它的 super。依此类推,直到最终根对象将实例本身使用的内存标记为空闲。当[super dealloc]返回时,您的实例已被释放。 (当然,其中的指针可能有效,但这是您不应该依赖的实现细节。)

通常,在构造(或加载)时让 super 首先完成工作。拆东西的时候,先做好你的工作。

另请参阅:

  • dealloc 、NSObject 类引用、Mac OS X 开发人员库
  • Deallocating an Object 、对象所有权和处置、内存管理编程指南、Mac OS X 开发人员库

具有自动引用计数

自动引用计数 (ARC) 是 Xcode 4.2 中引入的内存管理新方法。使用 ARC,编译器在编译应用程序时添加内存管理代码。它有一些问题,您需要在使用它之前阅读更多信息(主要是与旧操作系统版本的兼容性有限)。

使用 ARC,您根本不需要(也不能)调用[super dealloc]。相反,当您的 dealloc 完成时,会调用 [super dealloc]

另请参阅:

关于iphone - 正确[ super dealloc],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4566453/

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