1.2内存管理原则
当创建一个对象时(alloc new copy),创建的对象引用技术为1
当某段代码要访问这个对象时引用技术就+1
当这段代码完成后要对这个引用计数-1
当引用级数为0时,表示没有代码访问这个对象了,该对象就会被销毁(这个时候oc会自动向其发送一个dealloc消息)
这个就像是一个游戏房间,当房间中没有人的时候房间就自动解散了。
内存管理总结:
(一)原则
只要还有人使用某个对象,那么这个对象就不会被回收;只要你想使用这个对象,那么就应该让这个对象的引用计数+1;当你不想使用这个对象时,应该让这个对象的引用计数-1;
(二)谁创建,谁release
(1)如果你通过alloc,new,copy来创建了一个对象,那么你就必须调用release或者autorelease方法
(2)不是你创建的就不用你负责
(三)谁retain,谁release
只要你调用了retain,不论这个对象是如何生成的,你都要调用release
(四)总结
有始有终,有加就应该有减。曾经让某个对象计数器加1,就应该让其在最后-1。
1.3内存管理代码规范
1.只要调用了alloc,就必须要release(autorelease)
2.setter方法的规范:
基本数据类型直接赋值
oc对象类型,先判断和正在使用的是不是一个如果是,则什么都不做,如果不是,先将现在的release,并对新的retain;
- (void)setAge:(int) age
{
_age = age;
}
//不是oc对象不变
- (void) setCar:(car*) car
{
if( car!=_car ){
[_car release];
_car = [car retain];
}
}
3.dealloc方法的代码规范
[super dealloc]放在最后面
- (void) dealloc
{
[car release];
[super dealloc];
}
4.这样写会出现垃圾代码
[[Car alloc] init ].speed = 100; 这样没有释放了,没办法没有建立实际的对象。。~~。