在Xcode里面,默认为ARC(auto reference counting),也就是自动内存管理机制,在这里我们要了解的是内存管理,肯定是不能让系统帮我们管理内存,我们需要将ARC关闭,首先在左边选中你所创建的工程,点击build setting,Objective-C atomic reference counting,将YES改为NO。这时,你的工程就需要你自己来管理内存,因为此时系统不会在继续帮你管理内存。

在C语言和OC里面,内存管理有很大区别,在C里面,通过malloc和realloc创建内存,用free来释放内存,一旦调用free,这个对象会立即被释放,但是在OC里面有很大的不同,OC通过引用计数机制(retain count)来管理内存,当一个对象通过alloc,copy,mutablecopy,new来创建的时候,那么这个对象就被创建者拥有,此时它的retain count为1,在后面可以通过retain修饰来声明对一个不是自己创建的对象的拥有权,没对这个对象声明一次拥有权,这个对象的retain count就会+1,如果要释放对这个对象的拥有权,可以使用release,release释放只能是释放你自己对这个对象的拥有权,使这个对象的retain count -1,并不会摧毁这个对象,只有当这个对象的retain count 为0 的时候,系统才会去调用dealloc去释放这个对象(注意:这里是释放这个对象了,前面retain count -1的时候释放的是拥有权,注意2:这里是系统自动调用dealloc方法,不需要我们手动调用),在这里我们可以重写dealloc方法,让这个对象在被释放前做最后一点事(如果需要这个对象去做事的话,才去重写。其实一般不会用到自己重写dealloc方法,如果在这个类里面重写了,系统会调用我们自己重写的dealloc方法)。

手动管理内存通常会出现两种错误:

1.还在使用这个对象却已经将这个对象释放了

2.没有使用这个对象了,却没有释放这个对象

OC内存管理、非ARC机制、MRR机制的更多相关文章

  1. OC 内存管理-02 ARC 内存管理

    ARC 管理 概念: ARC简单,不用程序员在去管理内存 1.强指针 Strong[] :只要有强指针指向一个对象,那么系统就不会回收该对象 2.弱指针 weak :只要没有强指针指向对象,系统立即回 ...

  2. OC 内存管理机制总结

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

  3. OC的内存管理(二)ARC

    指针: 指向内存的地址指针变量 存放地址的变量指针变量值 变量中存放的值(地址值)指针变量指向的内存单元值 内存地址指向的值1):强指针:默认的情况下,所有的指针都是强指针,关键字strong ):弱 ...

  4. 启动期间的内存管理之pagging_init初始化分页机制--Linux内存管理(十四)

    1 今日内容(分页机制初始化) 在初始化内存的结点和内存区域之前, 内核先通过pagging_init初始化了内核的分页机制. 在分页机制完成后, 才会开始初始化系统的内存数据结构(包括内存节点数据和 ...

  5. Linux内存管理Swap和Buffer Cache机制

    Linux内存管理Swap和Buffer Cache机制 一个完整的Linux系统主要有存储管理,内存管理,文件系统和进程管理等几方面组成,贴出一些以前学习过的一个很好的文章.与大家共享!以下主要说明 ...

  6. OC内存管理-OC笔记

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

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

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

  8. oc内存管理总结(一)

    **内存管理 问题 1.什么是ios内存管理? 就是在对象不再被使用的时候,把它即时的从内存中清除掉 2.为什么要使用内存管理? 1.严格的内存管理,能够是我们的应用程在性能上有很大的提高 2.如果忽 ...

  9. 31 (OC)* 内存管理

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

  10. OC内存管理基础

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

随机推荐

  1. HDFS中将普通用户增加到超级用户组supergroup

     

  2. CentOS7下Mysql 5.6.30安装与配置

    环境:centos 7 x64 先下载mysql安装包 打开 http://dev.mysql.com/downloads/mysql/  选择 linux - Generic 再选择 下载完毕后,得 ...

  3. winform UI 设计方法

    这里主要提供了一种设计思路,你可以将成套的UI图像添加或替换到本程序中.在设计过程中,还存在许多疏漏,懒得仔细修改了,在使用过程中自行修改添加.这里的函数基本上都可以单独使用,需要哪个将cs文件加入到 ...

  4. centos7修改系统语言

    编辑文件:vim /etc/locale.conf LANG="en_US.UTF-8"    ##表示为英文 LANG="zh_CN.UTF-8"    ## ...

  5. CSDN网站阅读更多:实现原理

    一 设计案例 现在很多网站都增加了阅读更多功能.以CSDN为例,分析其实现原理. 二 设计原理 1 内容区的初始高度是固定的. 2 背景渐变的操作区,遮盖在内容区上面 3 点击按钮时,解除内容区的高度 ...

  6. Windows学习"Network Analysis in Python"

    原代码仓库的地址为 Network Analysis in Python. 主要按照里面的README.md 进行操作,全部仓库有100MB以上.考虑到数据比较大,再加上我对原笔记文件有修改,建议从我 ...

  7. supervisor学习

    概念 supervisord 服务端 启动supervisor程序自身,启动supervisor管理的子进程,响应supervisorctl的请求,重启闪退或异常退出的子进程,把子进程的stderr或 ...

  8. VBA XML信息提取

    Option Explicit Sub 读取XML节点() '后期绑定 'Dim xdoc As Object 'Set xdoc = CreateObject("MSXML2.DOMDoc ...

  9. mysql 函数介绍

    含义 一组预先编译好的SQL语句集合,可以理解成批处理语句 提高代码的重用性 简化操作 减少了编译次数并且减少了和数据库服务器的连接次数, 提高了效率 区别 : 存储过程:可以有0个返回,也可以有多个 ...

  10. java学习(三)

    学号 20189214 <Java程序设计>第三周学习总结 教材学习内容总结 核心类 java.lang.Object 所有的类都直接派生自这个类. java.lang.String St ...