您的位置:首页 > 移动开发 > IOS开发

IOS开发之内存管理(2)

2016-05-16 19:22 357 查看
#import "Person.h"
@implementation Person
- (void)setBook:(Book*)book
{
_book = [book retain];
}
- (Book*)book
{
return _book;
}
- (void)dealloc
{
[_book release];
NSlog(@"Person 对象被回收了!");
[super dealloc];
}
@end;

#import<Foundation/Foundation.h>
#import "Person.h"
#import "Book.h"
int main ()
{
Book *b = [[Book alloc]init];  //创建b对象,计数器为1
Person *P = [[Person alloc]init];//创建p对象,该计数器为1
IOS开发之内存管理(2) - 指尖飞码 - 矜持的猴子的博客
[p setBook:b];

IOS开发之内存管理(2) - 指尖飞码 - 矜持的猴子的博客

[b release];    //b的计数器减1;
b = nil;		//b的指向消失
[p release];	//p对象就没了,此时调用dealloc方法,先把b对象给释放了,接着自己也消失了;
return 0;
}


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

内存管理代码规范:
1.只要调用了alloc,必须有release(autorelease)
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];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: