OC内存管理、非ARC机制、MRR机制
在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机制的更多相关文章
- OC 内存管理-02 ARC 内存管理
ARC 管理 概念: ARC简单,不用程序员在去管理内存 1.强指针 Strong[] :只要有强指针指向一个对象,那么系统就不会回收该对象 2.弱指针 weak :只要没有强指针指向对象,系统立即回 ...
- OC 内存管理机制总结
OC 内存管理机制总结 一:OC内存管理机制目前分为两块,其一自动内存管理机制,其二手动内存管理机制: 1.首先我们从自动内存管理机制讲起: 1)什么是自动内存管理机制,自动内存管理机制就是程序中所创 ...
- OC的内存管理(二)ARC
指针: 指向内存的地址指针变量 存放地址的变量指针变量值 变量中存放的值(地址值)指针变量指向的内存单元值 内存地址指向的值1):强指针:默认的情况下,所有的指针都是强指针,关键字strong ):弱 ...
- 启动期间的内存管理之pagging_init初始化分页机制--Linux内存管理(十四)
1 今日内容(分页机制初始化) 在初始化内存的结点和内存区域之前, 内核先通过pagging_init初始化了内核的分页机制. 在分页机制完成后, 才会开始初始化系统的内存数据结构(包括内存节点数据和 ...
- Linux内存管理Swap和Buffer Cache机制
Linux内存管理Swap和Buffer Cache机制 一个完整的Linux系统主要有存储管理,内存管理,文件系统和进程管理等几方面组成,贴出一些以前学习过的一个很好的文章.与大家共享!以下主要说明 ...
- OC内存管理-OC笔记
内存管理细节:http://blog.sina.com.cn/s/blog_814ecfa90102vus2.html 学习目标 1.[理解]内存管理 2.[掌握]第一个MRC程序 3.[掌握]内存管 ...
- OC内存管理总结,清晰明了!
<span style="font-size:18px;">OC内存管理 一.基本原理 (一)为什么要进行内存管理. 由于移动设备的内存极其有限.所以每一个APP所占的 ...
- oc内存管理总结(一)
**内存管理 问题 1.什么是ios内存管理? 就是在对象不再被使用的时候,把它即时的从内存中清除掉 2.为什么要使用内存管理? 1.严格的内存管理,能够是我们的应用程在性能上有很大的提高 2.如果忽 ...
- 31 (OC)* 内存管理
31 (OC) 内存管理 一:内存管理黄金法则. 如果对一个对象使用了alloc.[Mutable]copy,retain,那么你必须使用相应的realease或者autorelease 二:内存管 ...
- OC内存管理基础
OC 内存管理基础 一. retain和release基本使用 使用注意: 1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作) 2.你不想再使用(占用)某个对象,就 ...
随机推荐
- ofstream文件输出流把二进制数据写入文件
#include <fstream> #include <sstream> using namespace std; //在实际应用中,根据需要的不同,选择不同的类来定义:如果 ...
- 转:vue项目如何刷新当前页面
想必大家在刨坑vue的时候也遇到过下面情形:比如在删除或者增加一条记录的时候希望当前页面可以重新刷新或者如下面这种: 如果希望点击确定的时候,Dialog 对话框关闭的时候,当前http://loca ...
- Vue如何更新子组件
黑科技: 给子组件绑定一个key值,当key值改变时,子组件就会更新 ~
- mysql学习笔记--数据库事务
一.概念 1. 事务是一个不可分割的单元 2. 事务作为一个整体要么一起执行,要么一起回滚 二.事务操作 1. 开启事务 start transaction 或者begin [work] 2. 提交事 ...
- XACT_ABORT选项
XACT_ABORT选项用于指定当SQL语句出现运行时错误时,SQL Server是否自动回滚到当前事务.其语法格式如下所示: SET XACT_ABORT{ON|OFF} 当SET XACT_ABO ...
- PowerScript表达式
运算符 算术运算符 双目运算符 运算符 名称 示例 说明 ^ 乘方 3^2 + 加 i_age+1 - 减 i_age - 1 * 乘 l_w*3 / 除 i_w/3 = 赋值 i ...
- Linux screenshot
一.简介 linux下的三个截图软件
- asp.net WebService如何去掉asmx后缀
现在有一个发布好的WebService,地址是http://hovertree.com:2706/UploadExpenseToConstract.asmx能不能把最后面的asmx去掉呢?变成http ...
- Vue 制作简易计算器
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- SpringSecurity入门demo
配置依赖: <properties> <spring.version>4.2.4.RELEASE</spring.version> </properties& ...