【Object - c 高级】01 内存管理 MRC
来源:互联网 发布:李勇seo博客 编辑:程序博客网 时间:2024/06/16 18:40
说道OC语言比较难理解比较绕弯弯的地方可能也就是内存管理这一块了, 正好复习到这里 就记录一下OC中的内存管理,如果您有幸看到此篇文章,请把我的不足之处指出谢谢!
一 内存区域的划分
内存分为五大区域 栈内存 堆内存 bss段 数据区 代码段
|-- 1. 栈内存 存放啊局部变量 <不需要程序员进行管理>
|-- 2. 堆内存 程序运行中动态分配的存储空间<需要程序员管理>
|-- 3. bss段 没有初始化的全局变量和静态变量
|-- 4. 数据区 已经初始化的全局变量和静态变量及字符串常量
|-- 5.代码段 你写的代码
注意: 程序启动的时候主要加载 bss段 数据区 和代码段,所以:全局变量要,静态变量,字符串常量尽可能少的使用以减少程序启动的负担(个人理解)
而OC的内存管理主要是研究对象的内存,也就是主要研究堆区,所有继承自NSObject的对象
二 内存管理的分类及原则
①OC中的内存管理分为三类(不对基本数据类型进行管理 如: int double float char struct enum)
|-- 1. MRC (MannuReference Counting) 手动内存管理 在IOS4.1之前的版本我们要自己负责使用引用计数来管理内存,比如 retain release autorelease
|-- 2. ARC (automatic reference counting) 在IOS4.1之后推出 ARC是苹果推出的计数,苹果推荐开发者使用ARC计数来管理内存
|-- 3. garbage collection(垃圾回收) ios不支持垃圾回收
需要注意的是 我们在学习的时候要了解MRC 实际项目开发的时候要尽量用ARC
②OC中内存管理的原则
|-- 1. 只要还有人在使用某个对象,那么这个对象就不会被回收
|-- 2. 只要你想使用这个对象 那么就该让这个对象的引用计数+1 (retian 一次)
|-- 3. 当你不想使用这个对象的时候 应该对对象的引用计数-1 (release 一次)
|-- 4. 谁创建 谁release
|-- 5. 谁retain 谁release
③OC中内存管理主要研究的内容
1. 野指针 以下是造成野指针的原因
|-- 1.1 定义指针变量没有初始化
|-- 1.2 指向的空间已经被释放
2.内存泄露
举例:
Person * person = [Person new];
person 在栈内存中
Person new ]在堆内存中
如果栈内存已经被释放 而堆内存的空间还没有释放 堆区的空间就被泄露了
三 内存管理 基本知识
|-- 1. 什么是引用计数 答: 用来保存当前对象有多少个东西在使用它
|-- 2. 引用计数的作用 答: 用来判断对象是否应该回收内存空间(需要注意的是: 如果对象不等于nil,当引用计数为0 此时要回收对象的内存空间)
|-- 3. 引用计数的操作 答:retain 使引用计数 +1 release 使应用及时 -1 retainCount 是得到引用计数的值(retainCount 返回的是一个NSInteger 类型的值)
|-- 4. 如果对象被释放了肯定会调用本类中重写NSObject的 deallloc 方法
|-- 5. 注意 : 在dealloc 方法中一定要调用父类的 dealloc方法 既[super dealloc];
四 配置手动内存管理
现在的Xcode创建出的项目都是ARC模式如何 将项目变为MRC模式
点击项目的Target
右侧栏中如下图 1.在 搜索框中输入 auto 2.小箭头所指位置默认均为yes 全部改成 no即可
至此 MRC模式已经配置完成
检测MRC是否可用
1. 在target中新建一个类
2. 在主函数中 new出类的对象
3. 在该类的.m 文件中打 dealloc 调用[super dealloc]没有出错/ 或者 用类在主函数中创建的对象 调用对象的 relsese retain 方法 没有报错即可
五 开启僵尸对象检测
首先点击target位置
然后点击 Edit Scheme...
然后选中 run 勾选 Enable Zombie Objects 最后点击close即可
这样我们的准备工作就都完成了
六 单个对象的内存管理(稍后完成)
- 【Object - c 高级】01 内存管理 MRC
- object-c内存管理(一) MRC
- Object-C 学习笔记(十)---内存管理MRC
- Object-C中的内存管理 MRC、ARC以及Autoreleasepool的区别
- Object-C中的内存管理 MRC、ARC以及Autoreleasepool的区别
- Objective-c - 内存管理(ARC/MRC),第一个MRC程序
- Objective-C中的内存管理及MRC
- Objective-c 内存管理-MRC retain&release
- Objective-c 内存管理-MRC 引用计数器
- Objective-c MRC内存管理-野指针
- object c 内存管理
- Object c 内存管理
- object-c 内存管理
- object-c 内存管理
- Object C 内存管理
- Object C 内存管理
- Object-c 内存管理
- OBJECT-C 内存管理
- ubuntu上简单操作(三)——安装chrome浏览器
- Javascript中关于call,apply,bind这三个函数的用法
- bzoj 3887: [Usaco2015 Jan]Grass Cownoisseur(spfa+tarjan)
- 企业级HBase集群搭建
- 数据库存储过程实例介绍
- 【Object - c 高级】01 内存管理 MRC
- 浅谈数据库中的触发器
- Static Text控件
- 线段树练习
- codeforces 727F. Polycarp's problems
- 基于UIWebview加载html代码 并获取标签
- Ubuntu 16.04 SSH 无法远程登录问题
- SDN开源项目汇总
- firefox插件