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
浙公网安备 33010602011771号