黑马程序员——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方法)。一旦对象被回收了,那么他所占据的存储空间就不再可用,坚持使用会导致程序崩溃(野指针错误)。

黑马程序员-------SQLServer数据库基础知识

---------------------- http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发、 http://edu.csdn.net...
  • guoguo_19900310
  • guoguo_19900310
  • 2014年01月12日 14:37
  • 1067

黑马程序员_OC内存管理

一、
  • aipeng
  • aipeng
  • 2014年06月01日 00:51
  • 1228

程序员百度云干货 不谢~~~~~~

这是一些学习资源,里面有Android的,iOS的,PHP的,大数据的,Java的,web前端的,C++,Python的…. 有的来源地址是在一个公众号的群.感谢群主的分享.有的是我以前收集的.在...
  • settingSun66
  • settingSun66
  • 2017年02月06日 16:51
  • 17733

黑马程序员——OC笔记之内存管理

------- android培训、java培训、iOS培训、.Net培训、期待与您交流! ---------- 为什么要内存管理? 移动设备的内存及其有限,每个app所能占用的内存是有限制的...
  • programmer4Byouth
  • programmer4Byouth
  • 2015年08月13日 13:44
  • 200

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

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

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

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 在OC中对象时存储在堆中的,系统并不会自动释放堆中的内存,而基本类型是由系统自己管理的,放在栈...
  • tt3tt3tt
  • tt3tt3tt
  • 2015年08月11日 09:30
  • 211

黑马程序员——OC学习之内存管理ARC

前面学完了oc里不使用ARC的方式管理内存,以及@autoreleasepool{}的使用。下面使用一下非常好用的ARC模式。 首先,ARC模式是一个编译器特性,它不同于java的垃圾回收器,java...
  • gissinghxu
  • gissinghxu
  • 2014年12月19日 14:16
  • 283

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

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-基本原理 什么是内存管理 1、移动设备的内存极其有限,每个app所能占用的内存是有限制的。 2、当app所占用...
  • qq_26989441
  • qq_26989441
  • 2015年04月14日 10:06
  • 162

黑马程序员——OC内存管理(一)

黑马程序员——OC基础---基础语法(一) ------- android培训、ios培训、期待与您交流! ---------- 内容概括: 一、内存管理 1、每个对象内部都有4个字节空间来存...
  • s266_
  • s266_
  • 2014年11月22日 09:47
  • 345

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

Xcode5.0之后已经让新建的项目强制带上ARC机制,但是内存管理依然是oc学习的核心之一。下面学习一下早起编写程序时是如何管理内存问题的。 先取消ARC机制,Xcode6.1中取消项目ARC机制方...
  • gissinghxu
  • gissinghxu
  • 2014年12月19日 14:10
  • 219
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员——oc的内存管理
举报原因:
原因补充:

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