iOS 基础 第四天(0809)
0809 - 内存管理,只对oc对象生效. alloc、retain、release、retainCount
局部变量是放在栈里面的,oc对象是放在堆里面的。栈里面的内容系统自动回收,而堆里面的内容还在,所以不适用ARC的时候要手动回收这些对象内容
如下图所示:

对象的基本结构
- 每一个对象内部都有一个引用计数器,占用4个字节,是一个整数,当这个引用计数器的值为0的时候,这个对象就会被系统回收销毁.当一个对象刚刚诞生的时候,这个计数器的值为1
如下图所示:

引用计数器的作用
如下图所示:

引用计数器的操作
如下图所示:

对象的销毁
如下图所示:
野指针
- 野指针:指向僵尸对象(不可用内存,这个内存已释放)的指针.例如:[p release]执行多次释放.可能会出错,前提是要打开Scheme下面的僵尸对象探测开关.
开关如下图:

也指针现象如下图所示:

具体错误现象如下图:

为了防止野指针可以将指针指向nil p = nil;
一些内存的总结
如下图:

有alloc就有release,有retain就有release
如果同时手动实现了一个成员变量的方法的话,这个成员变量的真实名称就不是name了。如果还是要使用name的话就要在@interface{}里面手动写上_name
如下图所示:


或者

自动释放池 autoreleasepool 自动释放 autorelease
- 自动释放池里的方法执行完毕后会自动调用一次释放池里对象的release方法
- 自动释放池可以嵌套自动释放池
- 自动释放池是放在栈中的
- 自动释放池里的对象无法精确控制.只有自动释放池方法执行完成的时候才会调用所有对象的release方法,将对象的引用计数器-1,及时都-1了这个对象也不一定就能释放,这里需要看自己的内存控制方式.
自动释放池栈结构:

自动释放池代码结构:

iOS 基础 第四天(0809)的更多相关文章
- IOS基础之 (四) OC对象
一 建立一个OC的类 完整的写一个函数:需要函数的声明和定义. 完整的写一个类:需要类的声明和实现. 1.类的声明 声明对象的属性和行为 #import <Foundation/Foundati ...
- iOS基础问答面试
<简书社区 — Timhbw>iOS基础问答面试题连载(一)-附答案:http://www.jianshu.com/p/1ebf7333808d <简书社区 — Timhbw> ...
- iOS基础UI控件介绍-Swift版
iOS基础UI控件总结 iOS基础控件包括以下几类: 1.继承自NSObject:(暂列为控件) UIColor //颜色 UIImage //图像 2.继承自UIView: 只能相应手势UIGest ...
- Android基础测试题(四)
看了前两道题大家有没有发现,测试题少了(一),大家猜猜测试题(一)是什么? Android基础测试题(四): 需求: 建一个方法,格式化输出2016-11-14 10:15:26格式的当前时间,然后截 ...
- IOS基础学习-2: UIButton
IOS基础学习-2: UIButton UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...
- Bootstrap<基础十四> 按钮下拉菜单
使用 Bootstrap class 向按钮添加下拉菜单.如需向按钮添加下拉菜单,只需要简单地在在一个 .btn-group 中放置按钮和下拉菜单即可.也可以使用 <span class=&qu ...
- iOS 基础日记-修饰符
今晚随便温习了一下iOS 基础关于修饰符这块的东西,下面简单的来描述一下,其中有的也是在网络学习到的: strong与weak是由ARC新引入的对象变量属性 ARC的解释:ARC引入了新的对象的生命周 ...
- MySQL基础(四)——索引
MySQL基础(四)--索引
- Python 基础语法(四)
Python 基础语法(四) --------------------------------------------接 Python 基础语法(三)------------------------- ...
随机推荐
- [转]利用vertical-align:middle实现在整个页面居中
本文转自:http://www.cnblogs.com/xueming/archive/2012/03/21/VerticalAlign.html 如果想让一个div或一张图片相对于整个页面居中,用v ...
- LeetCode 345
Reverse Vowels of a String Write a function that takes a string as input and reverse only the vowels ...
- LeetCode 203
Remove Linked List Elements Remove all elements from a linked list of integers that have value val. ...
- MultiMap、BidiMap及LazyMap的使用
一.MultiMap 在日常的开发工作中,我们有的时候需要构造像Map<K, List<V>>或者Map<K, Set<V>>这样比较复杂的集合类型的数 ...
- 网络编辑器插件ckeditor+ckfinder配置
原帖地址 另外一个 去掉编辑器的下边栏 在config.js中加入: config.removePlugins = 'elementspath'; config.resize_enabled = fa ...
- Microsoft.Practices.EnterpriseLibrary企业库问题
System.Configuration.ConfigurationErrorsException: Invalid TraceListenerData type in configuration ' ...
- C#中泛型容器Stack<T>
我以前都是学出c,c++,这个学期开始学c#有点不适应,在编程中遇到些问题,所以自己在网上查了些资料,翻了一下书,写一些总结. 关于c#中Stack<T>泛型容器: <1>st ...
- Mac环境下svn的使用(转载)
在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境.在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还 ...
- Git - Download for Linux and Unix
It is easiest to install Git on Linux using the preferred package manager of your Linux distribution ...
- SQL Server内存数据写入磁盘方法比较
众所周知,SQLServer增删改数据最先都是在内存中进行的,这可以大大加快数据操作的速度: 当内存中的数据被修改了,而磁盘中的数据还没有被修改时,就产生了所谓的“脏页”,SQLServer是如何同步 ...
