【iOS系列】-iOS中内存管理
iOS中创建对象的步骤:
1,分配内存空间,存储对象
2,初始化成员变量
3,返回对象的指针地址
第一:非ARC机制:
1,对象在创建完成的同时,内部会自动创建一个引用计数器,是系统用来判断是否回收对象的唯一标示,当我们的应用计数retainCount = 0的时候,系统会回收当前对象
2,[对象 release] retainCount - 1;
3,[对象 retain] retailCount + 1;
4,当应用计数retailCount = 0的对象就会被销毁;
5,dealloc函数,当一个对象销毁的时候,系统会自动调用dealloc函数,通知对象将要被销毁
内存管理原则(配对原则):只要出现了new,alloc,retaim,就一定配对出现一个release,autorelease
注:EXC_BAD_ACCESS 访问了不可访问的内存空间
被系统回收的对象,称为僵尸对象
默认情况下,xcode为了提高编码效率,不会时时检查僵尸对象
手动内存研究问题包括:
1,野指针操作
2,内存泄露:不再使用的对象,一直在内存中没有被销毁
//面试笔试,出题率非常高
- (void)setCar:(Car *)car
{
if (_car != car)
{ //relese旧值
[_car release];//[nil release];
//retain新值
_car = [car retain];
}
}
- (Car *)car
{
return _car;
}
- (void)dealloc
{
//目的是要保证在p对象存在的时候,car对象一定存在
[_car release];
[super dealloc];
NSLog(@"Person 被销毁了");
}
第二:ARC机制
研究ARC机制,就必须清楚@property的作用:
1.生产get与set方法的声明
2.生成get与set方法的简单实现
3.若果你没有声成名相对象的成员变量,那么他会自动生成一个_开头的成员变量
@property 参数分为4类
1.与set方法内存管理相关参数
retain: 要生成符合内存管理原则的set方法(应用与对象类型)
assign: 直接赋值,(对象类型,基本数据类型),简单的
copy :
2.多线程相关
nonatomic: 不生成多线程线管代码,使用这个就可以了(效率高一点)
atomic:生成多线程线管代码(不写默认是这种方式)
实际开发中,只要是对象类型的@property都写成下面
3.是否要生成set与get方法
readwrite: 可读可写属性,同时生成set与get方法
readonly : 只读属性,只生成get方法
4.set与get方法名称相关的参数
setter:设置生成的set方法名称
getter:设置生成的get方法名称
例如:
@property (nonatomic,retain) Car * car;
@property (nonatomic,retain)NSString * name;
@property (nonatomic,assign)int age; //int float double char
@property (nonatomic,assign)int weight;
@property (nonatomic,assign,readonly)int idCard;
//改变set与get方法名称很多都是用在BOOL类型的变量
@property (nonatomic,assign,setter = isDeid:,getter = isDeid)BOOL isDeid;
【iOS系列】-iOS中内存管理的更多相关文章
- iOS 非ARC基本内存管理系列 -手把手教你ARC——iOS/Mac开发ARC入门和使用(转)
手把手教你ARC——iOS/Mac开发ARC入门和使用 Revolution of Objective-c 本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流 ...
- [转载]对iOS开发中内存管理的一点总结与理解
对iOS开发中内存管理的一点总结与理解 做iOS开发也已经有两年的时间,觉得有必要沉下心去整理一些东西了,特别是一些基础的东西,虽然现在有ARC这种东西,但是我一直也没有去用过,个人觉得对内存操作 ...
- [Android开发学iOS系列] iOS写UI的几种方式
[Android开发学iOS系列] iOS写UI的几种方式 作为一个现代化的平台, iOS的发展也经历了好几个时代. 本文讲讲iOS写UI的几种主要方式和各自的特点. iOS写UI的方式 在iOS中写 ...
- 深入理解Linux中内存管理
前一段时间看了<深入理解Linux内核>对其中的内存管理部分花了不少时间,但是还是有很多问题不是很清楚,最近又花了一些时间复习了一下,在这里记录下自己的理解和对Linux中内存管理的一些看 ...
- C#编程(七十三)----------浅析C#中内存管理
浅析C#中内存管理 前言:个人觉得C#吸收了各种语言的优点,可谓集大成者,但是不知但,这种集所有语言于一身的情况是好是坏.C#编程的一个优点就是程序员不需要关心具体的内存管理,尤其是垃圾收集器会处理所 ...
- iOS 非ARC基本内存管理系列 2-多对象内存管理(3) 利用@property来自动管理内存
iOS 基本内存管理-多对象内存管理(2)中可以看到涉及到对象的引用都要手动管理内存:每个对象都需要写如下代码 // 1.对要传入的"新车"对象car和目前Person类对象所拥有 ...
- iOS开发系列—Objective-C之内存管理
概述 我们知道在程序运行过程中要创建大量的对象,和其他高级语言类似,在ObjC中对象时存储在堆中的,系统并不会自动释放堆中的内存(注意基本类型是由系统自己管理的,放在栈上).如果一个对象创建并使用后没 ...
- iOS 非ARC基本内存管理系列 2-多对象内存管理(2)
/* 多对象内存管理: 以人拥有车为例涉及到@property底层set方法管理内存的实现 注意:人在换车的时候要进行当前传入的车和人所拥有的车进行判断 */ /******************* ...
- iOS 非ARC基本内存管理系列 2-多对象内存管理(1)
单个对象的内存管理非常简单无非就是alloc对应release,retain对应release.但是如果涉及到很多对象,而且对象与对象有联系的时候该怎么去管理对象的内存呢. 比如同样一本书有好3个人购 ...
随机推荐
- CSRF verification failed. Request aborted. 表单提交方法为POST时的报错
本人所用Django版本为1.11,在设置请求方法为POST时,遇到标题中的错误,尝试了多种方法,最终通过下面的操作来修复: 在template文件中添加图中红框部分 接着,导入csrf_exempt ...
- EmpireofCode文档翻译 https://empireofcode.com/game/
In Campaign mode, you can check your strategies on already defeated bases. You will not lose your tr ...
- 牛客网 牛可乐发红包脱单ACM赛 A题 生成树
[题解] 其实就是求两棵树不同的边有多少条.那么我们用一个set来去重即可. #include<cstdio> #include<cstring> #include<se ...
- 算法导论 第十章 基本数据类型 & 第十一章 散列表(python)
更多的理论细节可以用<数据结构>严蔚敏 看几遍,数据结构很重要是实现算法的很大一部分 下面主要谈谈python怎么实现 10.1 栈和队列 栈:后进先出LIFO 队列:先进先出FIFO p ...
- MySQL 慢查询优化
为什么查询速度会慢 1.慢是指一个查询的响应时间长.一个查询的过程: 客户端发送一条查询给服务器 服务器端先检查查询缓存,如果命中了缓存,则立可返回存储在缓存中的结果.否则进入下一个阶段 服务器端进行 ...
- Linux 下Python2.7解决list打印中文字符问题
在写一个爬取智联招聘数据的爬虫中,将所需内容匹配到后打印出现了utf-8字符,并没有出现中文字符. 例如: >>>listnine = ['梨', '橘子', '苹果', '香蕉'] ...
- Light OJ-1082 - Array Queries,线段树区间查询最大值,哈哈,水过~~
...
- POJ 2115 C Looooops【数论】
很容易看出来一个同余式,说到底是解一个线性同余方程,计算机解通常有拓展欧几里得和欧拉定理两种算法,参照去年的NOIP水题,问题是这题数据范围是2^32所以要int64 TAT #include< ...
- Vim enhance part1
NO1 .认识.命令 例 删除man.config中第1到30行的注释 1.光标移到#上,按下x删除 2.按下j将光标移到第二行#上,之后按下. 3.可以看到第2行的#也被删除了因为.就是重复上次命令 ...
- 通过复制现有的redhat虚拟机的文件,实现在VMWare8.0上重建一个新的redhat虚拟机环境
1.将需要复制的redhat虚拟机的文件都存放在一个新的文件夹redhat下,因为虚拟机很大,所以复制可能花费较长的时间. 2.复制完成后,打开VMWare,选择“Open a Virtual Mac ...