美文网首页
OC内存管理

OC内存管理

作者: 方圆十里不留母狗 | 来源:发表于2016-04-17 22:38 被阅读49次

1.内存管理

在内存中申请空间,存储数据.声明1个变量.

当数据不再使用的时候,内存中申请的空间就应该被释放.

2.内存中的五大区域.

栈:存储的是局部变量.局部变量所在的作用域被执行完毕之后.就会被系统立即回收.

堆:程序员手动申请(malloc calloc realloc)的空间。除非程序员手动释放(free)否则直到程序结束的时候才会被释放.

OC对象,new或者alloc的时候OC对象就被创建在堆空间.

OC对象需要被回收吗?什么时候被回收呢?如何回收呢?

BSS段:存储未初始化的静态变量、全局变量.一旦被初始化就从BSS段回收,存储到数据段.

数据段:已经被初始化的静态变量、全局变量.常量数据.程序结束的时候才会被回收.

代码段:存储代码.直到程序结束的时候才会被回收.

3.堆中的OC对象是肯定需要被回收的.

iPhone 512 1GB 2GB

40M警告.

45M警告.

120M闪退.

4.内存管理的范围.

存储在堆中的OC对象不会自动回收.

如果我们创建1个OC对象,这个OC对象的被分配在堆区.

它不会被自动回收.如果我们不管它的话它会在程序结束的时候才会被回收掉.

我们需要管理的是:堆区中的OC对象的释放.

5.堆区的OC对象的回收.

1).什么时候应该回收OC对象.

当OC对象不再使用的时候,或者说没有人使用这个对象的时候这个对象就应该被回收掉.

2).对象的拥有者

谁在使用这个对象,谁就是这个对象的拥有者.

1个指针指向1个对象我们就说这个指针是这个对象的拥有者.这个指针在使用这个对象.

当没有任何指针指向这个对象的时候,就代表这个对象没有任何人在使用它那么这个时候就应该销毁这个对象.

6.引用计数器

每1个OC对象,都有1个属性叫做retainCount类型是unsinged long占据8个字节.叫做引用计数器.

这个属性的作用:用来记录有多少个人正在使用这个对象.

有1个OC对象.

当有1个人使用这个对象的时候,就应该为这个对象的引用计数器+1代表这个对象多了1个人使用.

当少1个人使用这个对象的时候,就应该为这个对象的引用计数器-1代表少1个人使用这个对象.

当对象的引用计数器为0的时候.代表没有人再使用这个对象了,那么这个时候系统就会自动回收这个对象.

在对象被回收的时候,会自动调用这个对象的dealloc方法.

7.操作对象的引用计数器

1).为对象发送1条retain消息.这个对象的引用计数器就会+1

2).为对象发送1条release消息.这个对象的引用计数器就会-1

3).为对象发送1条retainCount消息.就会得到这个对象的引用计数器的值.

当对象的引用计数器的值为0的时候.系统就会立即回收这个对象并执行这个对象的dealloc方法.

8.内存管理的分类.

OC对象的内存管理分为两类.

MRC: Mannul Reference Counting手动引用计数.

程序员手动写代码来改变对象的引用计数器的值.

每当多1个人使用对象的时候手动的为对象发送1条retain消息.

当少1个人使用这个对象的时候手动的为对象发送1条release消息

ARC: Automatic Reference Counting自动引用计数.

Xcode编译器自动的改变对象的引用计数器的值.

当多1个人使用对象的时候,就自动的为对象发送1条retain消息.

少release.

相关文章

  • 内存管理

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

  • 内存管理

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

  • Lesson 0-1 Objective-C basic

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

  • OC的内存管理

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

  • 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对象在堆中 ...

  • 《Effective Objective-C 2.0》读书笔记(

    第五章 内存管理 第29条:理解引用计数 OC 中有手动内存管理(MRC) 自动内存管理(ARC)手动内存管理需要...

网友评论

      本文标题:OC内存管理

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