引用百度百科图

栈(stack)又名堆栈。

栈定义:栈是限定仅在表头进行插入和删除操作的线性表(有序)。(又称:后进先出表)

(动态)数据展示存储的地方。(举例:升降电梯)特点:先进后出(FILO—First-In/Last-Out)

位置:处于内存条的最高地址。栈顶即最低地址,允许进行插入和删除操作的一端称为(最低地址)栈顶(top),另一端为(最高地址)栈底(bottom);

栈底固定,而栈顶浮动。注意静态变量是不入栈。

堆(heap)在这里的定义:堆是紧随在栈表头后进行插入和删除操作的线性表。又称:先进先出表)

(包含了大量无序的活动对象,需要通过指针来保存这些对象在堆中的地址。)

堆,(举例:银行排队)特点:队列优先,先进先出(FIFO—first in first out)

位置:处于内存条的最高地址栈的后面。

堆和栈的区别(引用南霸天mxw  中学数学教师 白银市第一中学教师2015-06-04 15:10    由科学教育分类达人 程明认证)

  一、堆栈空间分配区别:
  1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
  2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
  二、堆栈缓存方式区别:
  1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;
  2、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
  三、堆栈数据结构区别:
  堆(数据结构):堆可以被看成是一棵树,如:堆排序;
  栈(数据结构):一种先进后出的数据结构。

正文:

一、基本原理

1.内存

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

2.对象的基本结构

对象内部,有4个字节的存储空间来存储引用计数器。

3.引用计数器的作用

判断对象回收唯一依据是计数器是否为0,若为0则回收。

4.操作

发送消息,相应的计数器操作。

Retain:计数器+1,返回本身

Release:计数器-1(并不代表释放对象)

retainCount:获得当前计数器值

5.对象的销毁

当计数器为0,它被销毁,内存回收。

当对象被销毁,系统会发送一条dealloc,重写dealloc方法,释放资源。重写dealloc必须用[super dealloc],放在代码块最后调用(不能直接调用dealloc)。

对象被回收,占据的存储空间就不可用,坚持使用程序崩溃(野指针错误)。

 

十.oc内存管理的更多相关文章

  1. OC内存管理-OC笔记

    内存管理细节:http://blog.sina.com.cn/s/blog_814ecfa90102vus2.html 学习目标 1.[理解]内存管理 2.[掌握]第一个MRC程序 3.[掌握]内存管 ...

  2. OC 内存管理机制总结

    OC 内存管理机制总结 一:OC内存管理机制目前分为两块,其一自动内存管理机制,其二手动内存管理机制: 1.首先我们从自动内存管理机制讲起: 1)什么是自动内存管理机制,自动内存管理机制就是程序中所创 ...

  3. OC内存管理基础

    OC 内存管理基础 一. retain和release基本使用 使用注意: 1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作) 2.你不想再使用(占用)某个对象,就 ...

  4. QF——OC内存管理详解

    堆的内存管理: 我们所说的内存管理,其实就是堆的内存管理.因为栈的内存会自动回收,堆的内存需要我们手动回收. 栈中一般存储的是基本数据类型变量和指向对象的指针(对象的引用),而真实的对象存储在堆中.因 ...

  5. OC内存管理-黄金法则

    1.内存管理-黄金法则 The basic rule to apply is everything that increases the reference counter with alloc, [ ...

  6. OC内存管理总结,清晰明了!

    <span style="font-size:18px;">OC内存管理 一.基本原理 (一)为什么要进行内存管理. 由于移动设备的内存极其有限.所以每一个APP所占的 ...

  7. 31 (OC)* 内存管理

    31 (OC)  内存管理 一:内存管理黄金法则. 如果对一个对象使用了alloc.[Mutable]copy,retain,那么你必须使用相应的realease或者autorelease 二:内存管 ...

  8. iOS学习17之OC内存管理

    1.内存管理的方式 1> iOS应用程序出现Crash(闪退),90%的原因是因为内存问题. 2> 内存问题 野指针异常:访问没有所有权的内存,如果想要安全的访问,必须确保空间还在 内存泄 ...

  9. 【0 - 1】OC内存管理

    一.内存管理概述 垃圾回收机制(GC):由系统管理内存,程序员不需要管理. OC中的垃圾回收:在OC2.0版加入垃圾回收. OC与iOS:OC有垃圾回收机制,但是iOS屏蔽了这个功能.原因:iOS运行 ...

随机推荐

  1. java 静态方法和实例方法的区别(转)

    静态方法和实例方法的区别主要体现在两个方面:   在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式.而实例方法只有后面这 ...

  2. Nice Validator(Form验证)及Juery zTree控件

    http://niceue.com/validator/demo/match.php http://www.ztree.me/v3/demo.php#_603

  3. docker理念:不可变基础设施

    不可变基础设施 1.什么是Immutable Infrastructure Immutable Infrastructure,直译过来就是不可变基础设施. 它是由Chad Fowler于2013年提出 ...

  4. Django快速学习搭建blog项目

    新手学习Django,本文学习的文档是<Django Web开发指南>.好了我也是新手,没什么好说了,go!- 首先先确定环境,我是在linux(Ubuntu14.04 gnome)下. ...

  5. JQuery lhgdialog使用

    jQuery方式调用 J ); testDG4.SetPosition( 'center', 'center' );}; var testDG4 = J('#btn26').dialog({ id:' ...

  6. cs11_c++_lab7

    wcount.cc #include <iostream> #include <map> #include <string> #include <algori ...

  7. JS中offsetTop、clientTop、scrollTop、offsetTop各属性介绍

    这里是javascript中制作滚动代码的常用属性 页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见 ...

  8. Redis中的简单事物以及消息订阅发布

    Redis支持简单的事物,但是没有mysql的Innodb支持的那么的完善 我们接下来看一下Redis和Mysql的事物的一个对比:   MySQL Redis 开启 start transactio ...

  9. C# ADO.NET (sql语句连接方式)(增,删,改)

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  10. eclipse重定向输入输出到文件

    最近在学习算法第四版,为了要用作者给的测试数据alg4-data,需要将数据直接导入到程序中.在作者的示例代码里用了重定向来做这个事情,但是在eclipse里使用重定向很不方便,查了很多资料,都说是在 ...