内存管理代码规范:
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];
}
代码示例:
main.m
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Car.h"
int main(int argc, const char * argv[])
{
Person *p = [[Person alloc] init];
p.age = 20;
Car *c1 = [[Car alloc] init];
c1.speed = 250;
//p买了c1这辆车
p.car = c1;
Car *c2 = [[Car alloc] init];
c2.speed = 300;
//p换了一辆新车c2
p.car = c2;
[c2 release];
[c1 release];
[p release];
return 0;
}
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对象被回收了", self.age);
[super dealloc];
}
@end
Car.m
#import "Car.h"
@implementation Car
- (void)setSpeed:(int)speed
{
_speed = speed;
}
- (int)speed
{
return _speed;
}
- (void)dealloc
{
/*
_speed:直接访问成员变量
self.speed:get方法
self->_speed:直接访问成员变量
[self speed]:get方法
*/
NSLog(@"速度为%d的Car对象被回收了", self.speed);
[super dealloc];
}
@end