Iphone 正确[超级解除锁定]
dealoc方法中语句的顺序重要吗?Iphone 正确[超级解除锁定],iphone,dealloc,Iphone,Dealloc,dealoc方法中语句的顺序重要吗?[super dealloc]是否需要位于方法的顶部?这有关系吗 也可在例如viewDidLoad中使用。[super viewDidLoad]应该在方法的顶端吗?它绝对重要 您所做的取决于您使用的是自动引用计数(ARC)还是手动引用计数 使用手动释放保留 手动释放保留(MRR)是所有版本Mac OS X的默认内存管理,也是在Xcode 4.2之前处理内存的唯一方法 有了MRR,[super dealoc]应该位于方法的末尾 因此,您的代码应该如下所示: -
[super dealloc]
是否需要位于方法的顶部?这有关系吗
也可在例如
viewDidLoad
中使用。[super viewDidLoad]
应该在方法的顶端吗?它绝对重要
您所做的取决于您使用的是自动引用计数(ARC)还是手动引用计数
使用手动释放保留
手动释放保留(MRR)是所有版本Mac OS X的默认内存管理,也是在Xcode 4.2之前处理内存的唯一方法
有了MRR,[super dealoc]
应该位于方法的末尾
因此,您的代码应该如下所示:
- (void)dealloc
{
[member release];
[super dealloc];
}
[super dealloc];
[member release];
超级dealloc实际上释放了内存。想想看。如果在此之后访问实例变量,如下所示:
- (void)dealloc
{
[member release];
[super dealloc];
}
[super dealloc];
[member release];
…这意味着实例变量可能无效。在调用super dealloc和调用member release之间,理论上,存储成员指针的字节可以被更改为其他字节
正如苹果在报告中所解释的:
dealoc方法的作用是释放对象自己的内存,并处置它所持有的任何资源,包括任何对象实例变量的所有权
您可以通过处理对象持有的任何资源并调用[super dealoc]
来完成此操作。它处理它持有的任何对象,并调用它的super。依此类推,直到最终根对象将实例本身使用的内存标记为空闲。当[super dealloc]
返回时,您的实例已被释放。(当然,其中的指针可能是有效的,但这是一个不应该依赖的实现细节。)
一般来说,在建造(或装载)时,让超级工程师先完成工作。拆东西时,先做你的工作
另见:
- ,NSObject类参考,Mac OS X开发人员库
- ,对象所有权和处置,内存管理编程指南,Mac OS X开发人员库
[super dealoc]
。相反,当您的dealloc
完成时,会调用[super dealloc]
另见:
- LLVM解除锁定
它应该在顶部。父类应该在子类加载其部分之前完成加载视图所需的操作,因为它可能依赖于父类需要首先设置的内容。我认为这是“所有启动的东西都在我前面,完成的东西在我后面。”Objective-c没有“成员变量”。除此之外,完全正确。所以。。。[super dealloc]实际上会导致分配给该派生类实例的内存损坏,或可供堆重用?我问的原因只是为了理解两者的区别。在C++中,对象的内存不会被堆(或拥有它的人)释放,直到析构函数返回。根对象的dealloc释放实例本身