设为首页 加入收藏

TOP

[Objective-C]OC中的Dealloc方法详解
2014-11-23 17:59:02 来源: 作者: 【 】 浏览:9
Tags:Objective-C Dealloc 方法 详解

今天来学习一下Dealloc方法的使用。

它的作用是,当对象的引用计数为0,系统会自动调用dealloc方法,回收内存。它的一般写法:

1:-(void)dealloc{

    [super dealloc];
}
2:-(void)dealloc{
NSLog(@"laptop dead"); [_cpu release]; [super dealloc]; }
(一):为什么需要调用父类的dealloc方法?
     子类的某些对象实例是继承自父类的。因此,我们需要调用父类的dealloc方法,来释放父类
拥有的这些对象。
(二):调用的顺序
     一般说调用的顺序是,当子类的对象释放完时,然后再释放父类的所拥有的实例。这一点与调用初始化方法,
正好相反
下面使用一个例子来演示一下:
1:父类Vehicle.h
 
 
#import 
  
    @interface Vehicle : NSObject { @private NSString *_name; } -(id)initWithName:(NSString *)name; @end
  
2:父类Vehicle.m
#import "Vehicle.h"
@implementation Vehicle
 
 
-(id)initWithName:(NSString *)name{ self=[super init]; if(self){ _name=[name copy]; } return self; } -(void)dealloc{ NSLog(@"vehicle dead"); [_name release]; [super dealloc]; } @end
3:子类Car.h
 
 
#import 
  
    #import "Vehicle.h" @class Engine; @interface Car : Vehicle { Engine *_engine; } -(void)setEngine:(Engine *)engine; @end 
  
4:子类Car.m
#import "Car.h"
@implementation Car
 
 
-(void)setEngine:(Engine *)engine{ if(_engine!=engine){ [_engine release]; _engine=[engine retain]; } } -(Engine *)engint{ return _engine; } -(void)dealloc{ NSLog(@"Car dead"); [_engine release]; [super dealloc]; } @end 
5:测试main.m代码
 
 
#import 
  
    #import "Engine.h" #import "Car.h" int main(int argc, const char * argv[]) { @autoreleasepool { NSString *name=[[NSString alloc]initWithFormat:@"audi"]; Car *car=[[Car alloc]initWithName:name]; [name release]; Engine *v6=[[Engine alloc]init]; [car setEngine:v6]; [v6 release]; //do something [car release]; } return 0; }
  
运行截图
 
 \ 
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇[Objective-C]OC中代理(委托)设计.. 下一篇[Objective-C]OC中协议(Protocol)..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: