Objective-C 学习笔记17 dealloc

XCODE 4.5后采用自动回收机制,但不兼容IOS5以下版本

如果使用release报错,请参考 http://www.cnblogs.com/mybkn/articles/2381224.html 这里额设置

dealloc 总结

1、dealloc一般总是伴随 [super dealloc] 并且再最后一行显示,这同我们init方法正好相反,init的[super init]总是在第一行

2、有建议把dealloc放第一个方法,init放第二个方法,下面的示例没有这样做

建立一个类(父类)

//
//  Vehiche.h
//  sample006
//
//  Created by echoliu on 13-1-28.
//  Copyright (c) 2013年 echoliu. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Vehiche : NSObject{
    NSString *_name;
}
-(id)initWithName:(NSString*)name;

@end
//
//  Vehiche.m
//  sample006
//
//  Created by echoliu on 13-1-28.
//  Copyright (c) 2013年 echoliu. All rights reserved.
//

#import "Vehiche.h"

@implementation Vehiche
-(id)initWithName:(NSString *)name{
    self=[super init];
    if(self){
        _name=[name copy];
    }
    return  self;
}
-(void)dealloc{
    NSLog(@"vehiche dead");
    [_name release];
    [super dealloc];
    
}
@end

建立一个子类

//
//  Car.h
//  sample006
//
//  Created by echoliu on 13-1-28.
//  Copyright (c) 2013年 echoliu. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Vehiche.h"
@class Engine;
@interface Car : Vehiche{
    Engine *_engine;
}
-(void)setEngine:(Engine*)engine;
-(Engine*)engine;
@end

实现方法

//
//  Car.m
//  sample006
//
//  Created by echoliu on 13-1-28.
//  Copyright (c) 2013年 echoliu. All rights reserved.
//

#import "Car.h"

@implementation Car
-(void)setEngine:(Engine *)engine{
    if(_engine!=engine){
        [_engine release];
        _engine=[engine retain];
    }
}
-(Engine*)engine
{
    return _engine;
}

-(void)dealloc{
    NSLog(@"car dead");
    [_engine release];
    [super dealloc];
}
@end

其中Engine是建立的一个空类。

#import <Foundation/Foundation.h>

@interface Engine : NSObject

@end
#import "Engine.h"

@implementation Engine

@end

最终打印结果

2013-01-28 13:47:22.300 sample006[2285:303] car dead
2013-01-28 13:47:22.337 sample006[2285:303] vehiche dead

 

posted on 2013-01-28 13:53  ios开发达人  阅读(1058)  评论(0)    收藏  举报