美文网首页
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 对象的时候其存在

相关文章

  • 内存管理

    一.内存基本介绍 1、OC内存管理的基本概念 2、OC内存管理的范围​管理范围:管理任何继承自NSObject的对...

  • 内存管理

    目录一、内存分区 1、RAM和ROM 2、内存的五大分区二、内存管理 1、OC内存管理是指什么?OC内存管理的本质...

  • OC的内存管理

    1、OC的内存管理 OC是通过引用计数进行内存管理的,其核心思想遵循“谁创建谁释放;谁引用谁管理”。 OC的内存管...

  • Lesson 0-1 Objective-C basic

    6.OC 手动内存管理 OC 内存管理原则: 只要使用 alloc, new, copy, mutableCopy...

  • iOS之从MRC到ARC内存管理详解

    概述 在iOS中开发中,我们或多或少都听说过内存管理。iOS的内存管理一般指的是OC对象的内存管理,因为OC对象分...

  • iOS五大块知识总结之内存管理

    1.1 管理的原因 只有OC对象才需要管理内存,非OC对象(如:char、int、folat)则不需要管理内存的本...

  • iOS 中堆和栈的区别以及冒泡排序

    在引入堆和栈之前,先要知道,iOS中的内存管理范围: OC对象需要进行内存管理,非oc对象不需要进行内存管理,比如...

  • OC的内存管理

    最近系统地复习了OC的内存管理,所以总结下. OC是通过引用计数(reference count)来管理内存.自...

  • OC关于在MRC模式下的内存管理学习

    内存管理 管理范围 任何继承NSObject的对象 只有OC对象才需要进行内存管理的本质原理 1.OC对象在堆中 ...

  • 内存管理

    内存管理的重要性。 不进行内存管理和错误的内存管理会造成以下问题。 内存泄露 悬挂指针 OC内存模型 内存管理是通...

网友评论

      本文标题:OC的内存管理

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