objective-c内存管理

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;  这样没有释放了,没办法没有建立实际的对象。。~~。

原文地址:https://www.cnblogs.com/fanxinguu/p/4364204.html