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 基础语法(三)------------------------- ...
随机推荐
- python方式实现scoket通信
要想明白这个网络通信还真的是离不开实现它实现流程图,看明白了大体很多都知道,觉得这个博主画的不错,地址是 http://www.cnblogs.com/wangcq/p/3520400.html 1. ...
- 解决TestNG报java.net.SocketException
在运行TestNG时一直给我提示报“java.net.ScketException”问题, 网上查了下这个问题是要有网络写入的一些操作才会导致,我的程序也没有网络写入,因为我是使用的selenium+ ...
- sqlserver2005数据库18456错误(转)
第一步.以windows验证模式进入数据库管理器.第二步:右击sa,选择属性:在常规选项卡中,重新填写密码和确认密码(改成个好记的).把强制实施密码策略去掉.第三步:点击状态选项卡:勾选授予和启用.然 ...
- 关于Tesseract3.01的使用方法
Tesseract就不多介绍勒,能找到的人都知道是干嘛的 下面记录一下C# vs2010下的使用方法(借鉴http://blog.csdn.net/bobo1013767522/article/det ...
- 设计模式——设计模式之禅day2
接口隔离原则 接口分为两种: ● 实例接口( Object Interface) , 在Java中声明一个类, 然后用new关键字产生一个实例, 它是对一个类型的事物的描述, 这是一种接口. 比如你定 ...
- 学习之spring属性文件注入
package com.my.proper; import org.springframework.beans.factory.annotation.Value; import org.springf ...
- 进度条轮播【BackgroundColor】
直接贴代码先看 HTML: <div class="bannar"> <div class="img"> <ul> < ...
- java 读写锁
http://tutorials.jenkov.com/java-concurrency/read-write-locks.html 翻译 读写锁比LOCK的实现更复杂,想象有一个应用程序能读和写一些 ...
- Microsoft.DirectX.DirectSound学习(一)
背景:为什么用到这个类库呢?公司要一个要播放音频文件(.wav)的功能,本来想着很ez的事,网上提供的jq插件.本地也有很多播放器,怎么用都行.可当我实现的时候发现大部分网上插件在火狐上不支持.wav ...
- grails的插件
今天来歪理邪说一下grails的插件. 有个问题让本人困惑了一段时间,插件是属于grails的,还是属于某个工程的?为什么会有这个问题呢,这涉及到grails插件的安装方式. grails的插件像是一 ...
