OC内存管理Demo

//主函数

#import <Foundation/Foundation.h>

#import "Car.h"

int main(int argc, const char * argv[]) {

Lamp *lamp = [[Lamp alloc] init];                                     //初始化车灯对象

lamp.wattage = 75;

Engine *engine = [[Engine alloc] initWithModel:@"MX-8" Capacity:180]; //初始化引擎对象

Car *benz = [[Car alloc] initWithName:@"奔驰" Licence:@"京A:DB250"];  //初始化汽车对象

benz.engine = engine;

[engine release];           //将engine对象赋给benz后,引用计数-1,还剩1

benz.lamp = lamp;

[lamp release];             //将lamp对象赋给benz后,引用计数-1,还剩1

[benz run];                                 //调用run方法

//为上述方法设置定时器

//    [NSTimer scheduledTimerWithTimeInterval:1

//                                     target:benz

//                                   selector:@selector(run)

//                                   userInfo:nil

//                                    repeats:YES];

//    NSLog(@"-------------分割线--------------");

[benz stop];                                //调用stop方法

//为上述方法设置定时器

//    [NSTimer scheduledTimerWithTimeInterval:1

//                                     target:benz

//                                   selector:@selector(stop)

//                                   userInfo:nil

//                                    repeats:YES];

//    NSLog(@"-------------分割线--------------");

[benz release];//benz对象使用完毕,释放内存,此时benz、engine、lamp引用计数全部为0,系统自动调用dealloc方法销毁内存

//RunLoop10秒后停止

//    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:10]];

return 0;

}

Car类:

//car.h

#import <Foundation/Foundation.h>

#import "Engine.h"

#import "Lamp.h"

@interface Car : NSObject

{

NSString *_name;        //名字

NSString *_licence;     //车牌号

Engine *_engine;        //引擎对象

Lamp *_lamp;            //车灯对象

}

//对4个实例变量使用@property生成set和get方法

@property (nonatomic, copy) NSString *name;

@property (nonatomic, copy) NSString *licence;

@property (nonatomic, retain)Engine *engine;

@property (nonatomic, retain)Lamp *lamp;

//自定义初始化方法

- (id)initWithName:(NSString *)name Licence:(NSString *)licence;

//启动 方法

- (void)run;

//停止 方法

- (void)stop;

- (void)dealloc;

@end

//Car.m

#import "Car.h"

@implementation Car

- (id)initWithName:(NSString *)name Licence:(NSString *)licence

{

self = [super init];

if (self) {

_name = name;

_licence = licence;

}

return self;

}

- (void)run

{

NSLog(@"车牌号为:%@的%@车 启动了", _licence,  _name);

[_lamp light];

[_engine turn];

NSLog(@"-------------分割线--------------");

}

- (void)stop

{

[_lamp dark];

[_engine stopTurn];

NSLog(@"车牌号为:%@的%@车 停止了", _licence,  _name);

NSLog(@"-------------分割线--------------");

}

- (void)dealloc

{

[_lamp release];

_lamp = nil;

[_engine release];

_engine = nil;

NSLog(@"车牌号为:%@的%@车 卒!", _licence,  _name);

[super dealloc];

self = nil;

}

@end

Engine类:

//Engine.h

#import <Foundation/Foundation.h>

@interface Engine : NSObject

{

NSString *_model;       //型号

NSInteger _capacity;    //排量

}

@property (nonatomic, copy) NSString *model;

@property (nonatomic, assign) NSInteger capacity;

//自定义初始化方法

- (id)initWithModel:(NSString *)model Capacity:(NSInteger)capacity;

//转动 方法

- (void)turn;

//停止转动 方法

- (void)stopTurn;

- (void)dealloc;

@end

//Engine.m

#import "Engine.h"

@implementation Engine

- (id)initWithModel:(NSString *)model Capacity:(NSInteger)capacity

{

self = [super init];

if (self) {

_model = model;

_capacity = capacity;

}

return self;

}

- (void)turn

{

NSLog(@"型号为%@,排量为%ld的引擎 转动了", _model, _capacity);

}

- (void)stopTurn

{

NSLog(@"型号为%@,排量为%ld的引擎 停止转动了", _model, _capacity);

}

- (void)dealloc

{

NSLog(@"型号为%@,排量为%ld的引擎 卒!", _model, _capacity);

[super dealloc];

}

@end

Lamp类:

//Lamp.h

#import <Foundation/Foundation.h>

@interface Lamp : NSObject

{

int _wattage;

}

@property (nonatomic, assign) int wattage;

//灯亮 方法

- (void)light;

//灯灭 方法

- (void)dark;

- (void)dealloc;

@end

//Lamp.m

#import "Lamp.h"

@implementation Lamp

//灯亮 方法

- (void)light

{

NSLog(@"瓦数为%d的灯亮了", _wattage);

}

//灯灭 方法

- (void)dark

{

NSLog(@"瓦数为%d的灯灭了", _wattage);

}

- (void)dealloc

{

NSLog(@"瓦数为%d的灯 卒!", _wattage);

[super dealloc];

}

@end

时间: 2024-11-05 01:18:29

OC内存管理Demo的相关文章

OC内存管理

OC内存管理 一.基本原理 (一)为什么要进行内存管理. 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等. 管理范围:任何继承NSObject的对象,对其他的基本数据类型无效. 本质原因是因为对象和其他数据类型在系统中的存储空间不一样,其它局部变量主要存放于栈中,而对象存储于堆中,当代码块结束时这个代码块中涉及的所有局部变量会被回收,指向对象的指针也

OC内存管理-1

栈区:从高到低分配 堆区:从低到高 BSS段:没有初始化的 数据区: 代码段: OC内存管理方式: 1 MRC 手动内存管理 2 ARC 自动内存管理 nil是给对象赋空值 下个有道云笔记 内存管理 一.总结: 1.只有OC对象才需要内存管理,基本数据类型无效 2.OC对象存放在堆里面 3.非OC对象一般放在栈里面(栈内存会被系统自动回收) 二.引用计数器: 1.每个OC对象都有自己的引用计数器 2.它是一个整数(int) 3.表示有多少人正在使用这个对象 4.每个OC对象都有4个字节的存储空间

OC内存管理(一)

OC内存管理: 前言:为什么基本数据类型分配在栈区,而动态分配的内容在堆区. 因为基本数据类型的存放的数据在内存中得大小是固定的比如int类型的数据就是分配-2^31——2^31-1.而要分配不确定的数据在内存中得话,就动态分配到堆区. 一:基本原理 1>为什么要进行内存管理. 内存管理的范围是:继承自NSObjetc的类对象,对基本数据类型无效 我们知道手机的内存非常有限,而基本数据类型在编译时会静态分配内存在栈区,当代码块结束时,栈区的成员变量自动释放,当然指向对象的指针也会被释放.而对象是

OC内存管理2

这里是新的内容 OC内存管理2,布布扣,bubuko.com

黑马程序员-OC内存管理 @property的增强

涉及到内存管理,只读,多线程等很多功能时,setter和getter方法也就没那么简单了:当然@property依然强大,很好用: 1:内存管理相关参数: *:retain:  (如果是oc对象类型),生成的setter会自动release旧值,retain新值: *:assign:(适用于非oc对象)  这个是默认的值 *:copy:release旧值,copy新值: @property (retain) NSString *name; // 同类型的参数不能同时写 // @property

oc 内存管理小结(**输出才是最好的学习**)

引言 内存管理:清理(回收)不用的内存,以便内存能够再次利用. 这里就需要关注——怎样确定对象不再需要使用,并且其占用的内存可以被收回. 在Xcode4.2发布之前,oc内存管理全靠程序员自己,即手工管理内存计数. 在Xcode4.2版本之后,支持自动引用计数(Automatic Reference Counting,ARC),即摆脱手工管理,程序员从烦恼的内存管理问题中彻底解脱,oyeah~~ 但是,为了理解过去遗留的代码,还是需要了解手工管理内存的原理.并且,也可以帮助coder们更明智地决

OC内存管理相关整理

OC内存管理 一.基本原理 (一)为什么要进行内存管理.内存管理的目的是什么? 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等. 管理范围:任何继承NSObject的对象,对其他的基本数据类型无效 管理目的: 1.不要释放或者覆盖还在使用的内存,这会引起程序崩溃: 2.释放不再使用的内存,防止内存泄露.(ios程序的内存资源很是宝贵.) 本质原因是因

OC内存管理详解

前言 由于移动设备的内存有限,所以我们需要对内存进行严格的管理,以避免内存泄露造成资源浪费.在OC中,只有对象才属于内存管理范围,例如int.struce等基本数据类型不存在内存管理的概念.在iOS开发中,对内存的管理实际上就是对引用计数器的管理. OC内存管理的三种方式 自动垃圾收集(Automatic Garbage Collection): 手动引用计数器(Manual Reference Counting)和自动释放池: 自动引用计数器(Automatic Reference Count

OC 内存管理机制总结

OC 内存管理机制总结 一:OC内存管理机制目前分为两块,其一自动内存管理机制,其二手动内存管理机制: 1.首先我们从自动内存管理机制讲起: 1)什么是自动内存管理机制,自动内存管理机制就是程序中所创造的成员变量交由系统统一处理,不需要外部人员干预,有点像java中gc(垃圾回收机制). 2)之前是没有自动内存管理机制的,后期苹果想拓展自己的开发市场,吸引其他平台开发者入住ios开发阵营,其中收到内存管理是很发杂的一块,对于转入IOS开发者不利,因此苹果推出了自动内存管理机制. 2.接下来我们将