关情纸尾---OC-内存管理

作者: 关情纸尾 | 来源:发表于2016-04-21 15:39 被阅读53次

一、引用计数器

1.整数,4个字节,表示对象被利用的次数
2.创建一个新对象时,新对象的引用计数器默认为1
3.当某个对象的引用计数器为0时,所占内存被系统回收
4.引用计数器的操作
     retain  +1
     release  -1
     retainCount 获得当前引用计数器值
5.对象的销毁
  ①引用计数器 0
  ②系统自动发送dealloc给对象
  ③重写dealloc方法
  ④一旦重写了dealloc,就必须调用[super dealloc],放在最后面调用
  ⑤一旦对象被回收了,它占用的内存就不再可用,坚持使用会导致系统崩溃(也就是野指针错误)

<p></p>
<p></p>
<p>

二、野指针和空指针

1.僵尸对象:对象被回收,僵尸对象不能复活,即不能复活,也就是不能再用 retain 了。如果这个指针还需要用,要么赋新值,要么给个nil
2.野指针:指向僵尸对象或者不可用内存
3.空指针:null,nil,0.在oc中不存在空指针错误,系统只会发出警告,不报错
注:如果给已经释放的对象发送一条消息,可能导致程序闪退

<p>
<p>
<p>

三、set方法的内存管理

1.内存管理代码规范
(1)只要调用了dealloc,必须有release
(2)set方法的代码规范
  ①基本数据类型:直接复制
    -(void)setAge:(int)age
    {
        _age = age;
    }
  ②oc对象类型
   -(void)setCar:(Car*)car
  {
    if(car!=_car)  //先判断是不是新传递进来的对象
    {
      [_car release]; // 对旧对象做一次release
      _car = [car retain]; //对新对象做一次retain
    }
  }
2.dealloc方法的代码规范
(1)一定要[super dealloc],并且放到最后
(2)对self(当前)所拥有的其他对象做一次release
  -(void)dealloc
  {
      [_car release];
      [super dealloc];
  }

<p>
<p>

四、property的内存管理(代替oc对象的set方法,省略get方法)

@property(retain)Book*book;
相当于省略了,
-(void)setBook:(Book*)book
{
  if(_book!= book)
  {
    [_book release];
    _book = [book retain];
  }
}

<p>

五、参数分类

1.内存管理相关参数
    ①retain:release旧值,retain新值(适用于oc对象类型)
    ②assign:直接赋值(默认适用于非oc对象类型)
    ③copy:release旧值,copy新值
    ④strong:一般对象
2.是否要生成set方法
    ①readwrite:同时生成setter和getter的声明,实现(默认)
    ②readonly:只会生成getter的声明和实现
3.多线程管理
    ①nonatomic:性能高
    ②atomic:性能低(默认)
4.setter和getter方法的名称(自定义)
    setter:决定了set方法的名称,一定要有个冒号
    getter:决定了get方法的名称 

<p>

六、autorelease的基本使用

1.返回值是id,即对象本身
2.将对象一个自动释放池,当自动释放池(也是一个对象)被销毁时,会对池中所有对象做一次release操作,但是池子被销毁,对象不一定被销毁
3.不再用担心僵尸对象
4.创建的释放池以栈的方式存储,即先进后出
5.调用完autorelease后,对象的计数器不变
6.不用关心对象释放时间
7一般对占用内存较小的对象使用

<p>

七、ARC基本原理

1.ARC的特点
    ①不允许调用release、retain、retainCount
    ②允许重写dealloc,但是不允许[super dealloc]
    ③@property
        ☆strong:相当于retain(oc对象类型,强指针)
        ☆weak:相当于assign(oc对象类型,弱指针)
        ☆assign:适用于非oc对象类型
2.ARC的判断准则:只要没有强指针指向对象,就会释放对象
    强指针:系统默认都是。_strong
    弱指针:_weak

posted @ 2015-05-30 20:32

相关文章

网友评论

    本文标题:关情纸尾---OC-内存管理

    本文链接:https://www.haomeiwen.com/subject/ghmtrttx.html