码迷,mamicode.com
首页 > 其他好文 > 详细

内存管理

时间:2015-08-19 09:24:24      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

内存分为五大区域:栈区(存放局部变量),堆区(申请内存空间存储程序运行中动态分配的存储空间),BSS段,数据区,代码区【后三个是程序启动时使用】尽可能的减少全局变量

内存管理的范围:管理任何继承NSObject的对象,对其他的基本数据类型无效。

本质原因是因为对象和其他数据类型在系统中的存储空间不一样,其他局部变量主要存放于栈中,而对象存储于堆中,当代码块结束时这个代码块中涉及的所有局部变量会被回收,指向对象的指针也被回收,此时对象已经没有指针指向,但依然存在于内存中,造成内存泄露。

任何自己创建的对象,都归自己所有。可以使用名字以alloc或new开头或名字中包含copy的方法创建对象,可以使用retain来获得一个对象的所有权。retainCount(对象的引用计数器)用来表示当前对象到底有几个所有者。

在每个OC对象内部,都专门有8个字节的存储空间来存储引用计数器。引用计数器是判断对象要不要回收的依据,当retainCount值为0时,回收对象;当对象值为nil时,retainCount值为0,不回收。Person * p = nil;

给对象发送retain消息,使计数器+1(该方法返回对象本身);release消息,计数器-1(并不代表释放对象);retainCount消息,获得对象当前的引用计数器的值。

当对象被销毁时,系统会自动向对象发送一条“dealloc”消息,一般会重写dealloc方法,调用[super dealloc],并且放在代码块最后调用(不能直接调用dealloc方法)

一旦对象被回收了,那么他所占据的存储空间就不可再拥有,坚持使用会导致程序崩溃(野指针错误)。

OC内存管理分类:1,MRC(手动内存管理)2,ARC(自动引用计数)3,垃圾回收(ios并不支持垃圾回收)需要理解MRC,但实际使用尽量使用ARC。

手动内存管理快速入门

 

 

 

 

 

 

内存管理

标签:

原文地址:http://www.cnblogs.com/quwujin/p/4741230.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!