oc对象的内存管理
oc没有java的垃圾回收机制,所以对象的内存释放很重要,基本数据类型,我们不用理会,编译器会处理;
oc的每个对象内部都由一个计数器,用来记录当前有几个指针在指向该对象;当计数器为0时该对象会从内存中释放;
相关方法和概念:
1:retain:对象方法,调用该对象方法,计数器+1,有返回值,返回对象本身;
2:release:没有返回值,计数器-1;
3;retainCount:获取当前计数器的值;
4:dealloc:当对象被回收时,就会调用该方法,覆盖该方法时一定要调用[super dealloc],且放在最后;释放的顺序一般是先释放子类再释放父类;
注:arc环境下不用调用[super dealloc]
概念:
1:僵尸对象:内存已经被回收的对象,僵尸对象是不能在使用的,
2:野指针:指向了僵尸对象(不可用内存)的指针;给野指针发消息会报错:EXE_BAD_ACCESS
3:空指针:没有指向任何对象的指针:值为0、nil、null;给空指针发消息不会报错;
多对象内存管理:
内存管理核心思想:一般来说,类方法:alloc是在堆中开辟空间的,调用了alloc,计数器会+1;所以一旦写了alloc,一定要写release;同样调用了retain,一定要调用release;
当对象较多时,对象之间的组合关系很容易让我们忽视掉了,这个对象的指向者有几个;所以规范严格的写好setter方法和dealloc方法;
内存管理代码规范总结:
1:只要调用了alloc,必须有release(autorelease)
2:setter的规范写法:
*:如果是基本数据类型,则和平常一样;
*:如果成员变量是对象,也就是组合关系时,比如Person拥有一辆Car;那么Car的setter:
- (void)setCar:(Car *)car
{
// 首先判断传入的car是否和存在的car是同一个
if(_car != car)
{
// 先释放以前的car
[_car release];
// 在赋值 ,一定先对新的car做一次retain
_car = [car retain];
}
}
3:dealloc方法的代码规范:
*:对self (当前) 拥有的其他对象执行一次release
*:一定要调用父类的dealloc [super dealloc],且要放到最后边;
- (void)dealloc
{
// 对当前对象的其他对象release
[_car release];
[super dealloc];
}
oc对象的内存管理的更多相关文章
- oc-31-多对象的内存管理
在每个OC对象内部,都专门有8个字节的存储空间来存储引用计数器. 引用计数器的常见操作 retain消息:堆内存中对象的计数器变量 +(该方法返回对象本身,要想计数器变量加1就要调用对象的retain ...
- OC学习10——内存管理
1.对于面向对象的语言,程序需要不断地创建对象.这些对象都是保存在堆内存中,而我们的指针变量中保存的是这些对象在堆内存中的地址,当该对象使用结束之后,指针变量指向其他对象或者指向nil时,这个对象将称 ...
- OC开发系列-内存管理
概述 移动设备的内存极其有限,每个app所有占用的内存是有限的.当app所占用的内存比较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间. 任何集成了NSObject的对象都需要手动进行 ...
- Objective-C之集合对象的内存管理
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- block没那么难(三):block和对象的内存管理
本系列博文总结自<Pro Multithreading and Memory Management for iOS and OS X with ARC> 在上一篇文章中,我们讲了很多关于 ...
- Java进阶2 数组内存和对象的内存管理知识
Java进阶2 数组内存和对象的内存管理知识 20131028 前言: 在面试的时候,如果是Java的编程语言,也许你认为没有什么可以问的,只能够说明你对于Java了解的太浅了,几乎就是两个星期的节奏 ...
- oc56--ARC多个对象的内存管理
// main.m // ARC中多个对象的内存管理:ARC的内存管理就是MRC的内存管理(一个对象释放的时候,必然会把它里面的对象释放),只不过一个是Xcode加的代码,一个是我们自己加的代码: / ...
- OC中的内存管理
一. 基本原理 1. 什么是内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需 ...
- OC修饰词 - 内存管理
<招聘一个靠谱的 iOS>—参考答案(上) 说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:<招聘一个靠谱的 iOS>,其中共55题,除第一题为纠错题外,其他54道均 ...
随机推荐
- sql Truncate 与 delete的区别
Truncate 语法 TRUNCATE TABLE [ { database_name .[ schema_name ] . | schema_name . } ] table_na ...
- 北大ACM(POJ1010-STAMPS)
Question:http://poj.org/problem?id=1010问题点:DFS.剪枝. Memory: 220K Time: 32MS Language: C++ Result: Acc ...
- apache Internal Server Error 的几个问题
Internal Server Error The server encountered an internal error or misconfiguration and was unable to ...
- Cocos2d-JS动画
与动作密不可分的还有动画,动画又可以分为场景过渡动画和帧动画.场景过渡动画我们在以往介绍过,这一个我们只介绍帧动画.帧动画帧动画就是按一定时间间隔.一定的顺序.一帧一帧地显示帧图片.我们的美工要为精灵 ...
- SharpMap V1.1 For Web教程系列之——前言
上次使用SharpMap还是在0.9版本阶段,那个时候主要是为了将SharpMap移植到Windows Mobile环境中,具体可参见原先的文章.互联网真的是风云变幻啊,才短短几年,Windows M ...
- 20150309—bs的保存状态
http:保存状态方式,传值方式 session:(会话) 默认过期时间20分钟(20分内无任何操作自动销毁),针对用户独立,一般用来存储少量信息的 存值:session[“name”]=data;( ...
- 7款纯CSS3实现的炫酷动画应用
1.纯CSS3实现人物摇头动画 这次我们要来分享一款超级可爱的纯CSS3人物摇头动画,初始化的时候人物的各个部位是利用CSS3动画效果拼接而成,接下来就是人物听音乐的场景,一边听音乐一边摇着脑袋,十分 ...
- Windows 命令大全
打开控制面板的方法:输入control,回车即可打开. 以下是“运行”里常见的命令: gpedit.msc-----组策略 sndrec32-------录音机 Nslookup-------IP地址 ...
- c/c++面试总结(3)
7.vector和list的区别(这个也算是经常问的) vector和数组类似,拥有一段连续的内存空间,并且起始地址不变,这样对随机的读取很有效率(就是我们所有的[]运算符了),因为内存是连续的如果我 ...
- 【风马一族_Android】Android学习
如果是色彩盲,请自行收藏这个网站:Material Design Color Palette Generator 所有书上的UI部分扫一遍就行了,我相信现在还没有书按material design标准 ...