您的位置:首页 > 编程语言 > C语言/C++

IOS开发---OC语言-⑳内存管理:set方法内存管理

2014-12-03 11:45 633 查看

例一:

/*
1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作)
2.你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次release)

3.谁retain,谁release

4.谁alloc,谁release
*/









上面的方法不严谨

例二:

文件名:Person.h

*/

#import <Foundation/Foundation.h>

#import "Car.h"

@interface Person : NSObject

{

Car *_car;

int _age;

}

- (void)setAge:(int)age;

- (int)age;

- (void)setCar:(Car *)car;

- (Car *)car;

@end

文件名:Person.m

#import "Person.h"

@implementation Person

- (void)setCar:(Car *)car

{

if (car != _car)

{

// 对当前正在使用的车(旧车)做一次release

[_car release];

// 对新车做一次retain操作

_car = [car retain];

}

}

- (Car *)car

{

return _car;

}

- (void)setAge:(int)age

{ // 基本数据类型不需要管理内存

_age = age;

}

- (int)age

{

return _age;

}

- (void)dealloc

{

// 当人不在了,代表不用车了

// 对车做一次release操作

[_car release];

NSLog(@"%d岁的Person对象被回收了", _age);

[super dealloc];

}

@end

文件名:Car.h

#import <Foundation/Foundation.h>

@interface Car : NSObject

{

int _speed;

}

- (void)setSpeed:(int)speed;

- (int)speed;

@end

文件名:Car.m

#import "Car.h"

@implementation Car

- (void)setSpeed:(int)speed

{

_speed = speed;

}

- (int)speed

{

return _speed;

}

- (void)dealloc

{

/*

_speed :直接访问成员变量

self->_speed :直接访问成员变量

self.speed : get方法

[self speed] : get方法

*/

NSLog(@"速度为%d的Car对象被回收了", _speed);

[super dealloc];

}

@end

总结:

/*

内存管理代码规范:

1.只要调用了alloc,必须有release(autorelease)

对象不是通过alloc产生的,就不需要release

2.set方法的代码规范

1> 基本数据类型:直接复制

- (void)setAge:(int)age

{

_age = age;

}

2> OC对象类型

- (void)setCar:(Car *)car

{

// 1.先判断是不是新传进来对象

if ( car != _car )

{

// 2.对旧对象做一次release

[_car release];

// 3.对新对象做一次retain

_car = [car retain];

}

}

3.dealloc方法的代码规范

1> 一定要[super dealloc],而且放到最后面

2> 对self(当前)所拥有的其他对象做一次release

- (void)dealloc

{

[_car release];

[super dealloc];

}

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: