美文网首页
内存管理

内存管理

作者: G_M | 来源:发表于2016-07-08 20:53 被阅读13次

1. 引用计数器:用来保存当前对象有几个东西在使用它(数字)

2. 引用计数器的作用:用来判断对象是否应该回收内存空间(如果对象不等于nil,当引用计数器为0,此时要挥手对象的内存空间)

3. 引用计数器的操作: retain  使用引用计数器+1

release  使得引用计数器-1

retain count  得到引用计数器的值

4. 如果一个被释放的时候,会“临终遗言”(会调用该对象的dealloc方法)

注意:

1)dealloc方法是NSObject的,一般我们要重写dealloc方法

2)在dealloc方法的内部,要调用[super dealloc];

5.内存管理:对象如果不在使用了,就应该回收他的空间,防止造成内存泄漏

6.内存管理的范围: 所有的继承了NSObject的对象的内存管理,基本数据类型的数据内存不需要我们进行管理

7.内存管理的原则:

如果对象有人使用,就不应该回收

如果你想使用这个对象,应该让这个对象 retain一次

如果你不想使用这个对象了,应该让这个对象relase一次

谁创建 谁release

谁retain 谁release

                          ARC

1.指针的分类:

1)默认情况下,所有的指针都是强指针,关键字strong

2)弱指针: __weak关键字修饰的指针

2. 什么是ARC

自动引用计数,当ARC开启式,编译器将自动在代码合适的地方插入retain release 和 autorelease

ARC与其他语言的”垃圾回收”机制不同,ARC是编译器的特性,”垃圾回收”运行时的特性

3. ARC的判断准则:  只要没有强指针指向对象,对象会被释放

4.__strong 是一个修饰符,修饰这个指针是一个强指针  __weak修饰这个指针是弱指针

@property的参数:  strong相当于原来的retain(适用于OC对象类型),成员变量是强指针

weak: 相当于原来的assign,(适用于OC对象类型),成员变量是弱指针

assign:适用于非OC对象类型(基础类型)

5. ARC使用注意事项:

1)ARC中,只要弱指针指向的对象不再了,就直接把弱指针做清空(赋值nil)操作

2)__weak Person *p =[(Perspn alooc)init];这句话不合理,因为刚创建出来就释放了,因为是弱指针

相关文章

  • iOS内存管理详解

    目录 block内存管理 autorelease内存管理 weak对象内存管理 NSString内存管理 new、...

  • 第10章 内存管理和文件操作

    1 内存管理 1.1 内存管理基础 标准内存管理函数堆管理函数虚拟内存管理函数内存映射文件函数 GlobalMem...

  • 操作系统之内存管理

    内存管理 包括内存管理和虚拟内存管理 内存管理包括内存管理概念、交换与覆盖、连续分配管理方式和非连续分配管理方式(...

  • JavaScript —— 内存管理及垃圾回收

    目录 JavaScript内存管理内存为什么需要管理?内存管理概念JavaScript中的内存管理JavaScri...

  • OC - OC的内存管理机制

    导读 一、为什么要进行内存管理 二、内存管理机制 三、内存管理原则 四、MRC手动内存管理 五、ARC自动内存管理...

  • 3. 内存管理

    内存管理 内存管理包含: 物理内存管理; 虚拟内存管理; 两者的映射 除了内存管理模块, 其他都使用虚拟地址(包括...

  • Go语言——内存管理

    Go语言——内存管理 参考: 图解 TCMalloc Golang 内存管理 Go 内存管理 问题 内存碎片:避免...

  • jvm 基础第一节: jvm数据区

    程序内存管理分为手动内存管理和自动内存管理, 而java属于自动内存管理,因此jvm的职能之一就是程序内存管理 j...

  • 内存管理

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

  • 11-AutoreleasePool实现原理上

    我们都知道iOS的内存管理分为手动内存管理(MRC)和自动内存管理(ARC),但是不管是手动内存管理还是自动内存管...

网友评论

      本文标题: 内存管理

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