黑马程序员——oc的内存管理

原创 2015年07月09日 10:22:10
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

oc中的内存管理

一.为什么进行内存管理
由于系统有限,所以每个程序所占的内存也是有限制的,当程序所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等。
本质原因是因为对象和其他数据类型在系统中的存储空间不一样,其它局部变量主要存放于栈中,而对象存储于堆中,当代码块结束时这个代码块中涉及的所有局部变量会被回收,指向对象的指针也被回收,此时对象已经没有指针指向,但依然存在于内存中,造成内存泄露。
二.怎样管理内存机制
1.内存管理机制

ObjC中提供了一个“引用计数”(retain counting)机制

(1)每一个对象都有一个引用计数(retain count) 

(2)对象被创建的时候,引用计数的值是1 

(3)当引用计数值是0的时候,对象将被系统统一销毁 

(4)可以通过调用一些方法来操作引用计数的值


获得所有权的方法:

(1)alloc:为一个新对象分配内存,并且它的引用计数为1。调用alloc方法,你便有对新对象的所有权

(2)copy:制造一个对象的副本,该副本的 引用计数为1,调用者具有对副本的所有权

(3)retain:使对象的引用计数加1,并且获得对象的所有权


放弃所有权的方法:

(1)release:使对象的引用计数减1,并且放弃对象的所有权

(2) autorelease:使对象的引用计数在未来的某个时候减1,并且在那个时候放弃对象的所有权

2.对象的销毁
当一个对象的引用计数器(retain count)0时,那么它将被销毁,其占用的内存被系统回收。当对象被销毁时,系统会自动向对象发送一条dealloc消息,一般会重写dealloc方法,在这里释放相关的资源。一旦重写了dealloc方法就必须调用[super dealloc],并且放在代码块的最后调用(不能直接调用dealloc方法)。一旦对象被回收了,那么他所占据的存储空间就不再可用,坚持使用会导致程序崩溃(野指针错误)。

相关文章推荐

黑马程序员——OC内存管理复习(非ARC部分)

oc内存管理 一.计数器的思想 每个对象刚分配存储空间初始化时候默认计数器为1,然后每有一个新的指针指向他的时候计数器就会加1,每当这个指针不用而撤掉之后要减1,当计数器为0的时候,从内存...

黑马程序员——OC基础:内存管理和自动引用计数(ARC)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、内存管理 1.第一种方式 #import #import "Book.h" @inter...
  • Big_Zzq
  • Big_Zzq
  • 2015年04月27日 21:18
  • 537

黑马程序员——OC基础---内存管理

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——- 第一讲 内存管理的基本概念为什么要内存管理...

黑马程序员——ios开发基础之OC内存管理与blocks

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 第一讲    内存管理 1. 内存管理概念理解           1)内存管理的范围     ...

黑马程序员——OC内存管理

------- Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、基本原理 1、什么是内存管理 移动设备的内存极其有限,每个app所能占...

黑马程序员——OC学习笔记05 内存管理1

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、局部变量和指向对象的指针存放在栈中,它们是局部变量。程序会自动回收它们。对象存放在...

黑马程序员——OC学习之内存管理和自动释放池

Xcode5.0之后已经让新建的项目强制带上ARC机制,但是内存管理依然是oc学习的核心之一。下面学习一下早起编写程序时是如何管理内存问题的。 先取消ARC机制,Xcode6.1中取消项目ARC机制方...

黑马程序员——OC的内存管理

——- android培训、java培训、期待与您交流! ———-1.内存的创建和释放让我们以Object-c世界中最最简单的申请内存方式展开,谈谈关于一个对象的生命周期。首先创建一个对象:id te...

黑马程序员——OC语言------内存管理和ARC

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 内存管理   一、概述 移动设备的内存极其有限,每个app所能占用的内存是有限制的,当app所...
  • casono1
  • casono1
  • 2015年03月19日 17:45
  • 176

黑马程序员——9、OC语言(内存管理和ARC)

一、内存管理
  • tan_qi
  • tan_qi
  • 2014年10月23日 14:37
  • 262
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员——oc的内存管理
举报原因:
原因补充:

(最多只允许输入30个字)