iOS中正确处理dealloc方法
来源:互联网 发布:经济数据分析 编辑:程序博客网 时间:2024/05/21 22:26
当我们继承类的时候,子类实例在构造的时候顺序是先高用父类的构造方法,再调用子类的构造方法。在c/c++是如此,在objc中也是如此,在iOS开发中,我们会看到这样的代码:
1.- (void)init
2.{
3. self = [super init];
4. if (self) 5. {
6. //init 7. }
8.
9. return self; 10.}
看到没,初始化的时候都是先调用父类的初始化方法,为什么呢,因为父类更老,当然是先出生了。,同样的情况可以在viewDidLoad中看到。
而销毁的时候则是相反的顺序,先销毁子类里分配的空间,再销毁父类的。如:
1.- (void)dealloc {
2. [companion release];
3. free(myBigBlockOfMemory);
4. [super dealloc];
5.}
为什么会是这个顺序呢?因为长江后浪推前浪,子类是继承了父类的优点,发挥了自己长外, 敌人要想消灭对方,当然是先灭最强的,都说树大招风,就是这个道理。在销毁的时候如果不按这个顺序,有时候可能会crash。如在子类中应用了:
1.[outputStream setDelegate:self];
2.[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
如果dealloc写这成这样就会在removeFromRunLoop的时候crash:
1.- (void)dealloc {
2. [super dealloc];
3. if (outputStream) { 4. [outputStream close];
5. [outputStream removeFromRunLoop:[NSRunLoop currentRunLoop]
6. forMode:NSDefaultRunLoopMode];
7. [outputStream release];
8. outputStream = nil;
9. }
10. delegate = nil;
11.}
如果写成这样就ok了:
1.- (void)dealloc {
2. if (outputStream) { 3. [outputStream close];
4. [outputStream removeFromRunLoop:[NSRunLoop currentRunLoop]
5. forMode:NSDefaultRunLoopMode];
6. [outputStream release];
7. outputStream = nil;
8. }
9. delegate = nil;
10. [super dealloc]; // must be last! 11.}
在xCode version:4.2.1及以前版本中开发iOS的时候,如果将super dealloc写在子类dealloc中前面的时候是不会出错的,但在xCode version4.3.2中,它会有自动检测super dealloc的功能,如果写在前面,则会crash.
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2012-04/57904.htm
- iOS中正确处理dealloc方法
- iOS中正确处理dealloc方法
- iOS dealloc方法没有调用
- iOS pop 不走dealloc方法
- iOS WKWebview的dealloc方法崩溃问题
- iOS viewcontroller中的dealloc方法不调用
- IOS dealloc
- ios dealloc
- ios中block,NSTimer和dealloc
- 【ios】ARC中重写NSObject的dealloc方法的一个小细节
- arc中dealloc方法不调用
- iOS开发视频教程—6.3详解dealloc方法
- iOS pop 了为什么不走dealloc方法
- 正确处理SqlCeException的方法
- iOS中造成dealloc不调用的原因
- Linux中正确处理errno
- xcode4中UIViewController为什么没了dealloc方法
- 方法中使用到的NSString是否需要dealloc?
- 在SAP Netweaver ABAP Trial 上 安装 BI Content
- JavaScript世界的一等公民
- 移动互联网趋势观察
- 详解自动挂载文件系统autofs
- set相关操作源码
- iOS中正确处理dealloc方法
- 关于sizeof 和 strlen的区别
- Android Webview播放HTML5 video的一个思路
- 20120815
- Ubuntu启动自动运行脚本的方法
- hdoj 2094 产生冠军
- 用jacob为word表格设置边框线
- Linux基础之启动流程
- 循环表格 最下面是 费用的汇总