美文网首页
OC的内存管理

OC的内存管理

作者: lilinjianshu | 来源:发表于2016-03-03 22:22 被阅读43次

    1、OC中的内存管理机制:引用计数

         每个对象都有引用计数。理论上:当对象的引用计数为0时,系统会自动调用方法,销毁对象,回收内存

         在开发中存在多个指针操作同一个对象, 如果不在需要使用对象,减少相应的引用计数

    2、内存管理的方式:

         (1)MRC(手动内存管理):人工引用计数,内存的开辟和释放都由程序代码进行控制,相等垃圾回收来说,对内存的控制更加灵活,可以在内存需要释放时及时释放。

          (2)ARC(自动内存管理):自动引用计数,用户可以不用去释放空间

    3、alloc  引用计数加1(本质上从0——> 1)

           Person * p = [[Person alloc]init];

            NSLog(@"%lu", p.retainCount);//注:  retainCount返回当前内存值

    4、retain引用计数加1,在原有的基础上增加

    Copyright:zhangjianjun

    5、copy引用计数加1;被拷贝的对象的引用计数不变,新创建的对象从0增加到1

    6、release引用计数减1,在原有的基础上减少

     例:

        [p release];

       NSLog(@"%lu",p.retainCount);

       [p release];

      NSLog(@"%lu",p.retainCount);

      [p release];

      NSLog(@"%lu",p.retainCount);

    //此时系统销毁对象,回收内存,此时,指针p被称为野指针,不应该再使用指针p

    //操作原对象调用方法,p = nil; //

    //由野指针直接换为空指针,对nil操作不会出错

         [p release];

       NSLog(@"%lu",p.retainCount);  //打印结果为0;

    7、autorelease 引用计数减1,在未来的某个时刻减1,如果想安全使用对象,可以通过对像调用

    8、retain方法,增加对象的引用计数。持有(引用)对象

    例:

       - (void)setBook: (Book *)book

      {

      _book  = [book retain];}//加retain是为了代码安全保证在调用Book 对象的时候其存在

    相关文章

      网友评论

          本文标题:OC的内存管理

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