【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;
转载于:https://www.cnblogs.com/fengtengfei/p/4306276.html
【iOS系列】-iOS中内存管理相关推荐
- IOS开发系列—Objective-C之内存管理
概述 我们知道在程序运行过程中要创建大量的对象,和其他高级语言类似,在ObjC中对象时存储在堆中的,系统并不会自动释放堆中的内存(注意基本类型是由系统自己管理的,放在栈上).如果一个对象创建并使用后没 ...
- 理解 iOS 和 macOS 的内存管理
在 iOS 和 macOS 应用的开发中,无论是使用 Objective-C 还是使用 swift 都是通过引用计数策略来进行内存管理的,但是在日常开发中80%(这里,我瞎说的,8020 原则嘛?)以 ...
- 关于IOS的多任务以及内存管理
看了很多FY为自己的可用内存是350MB还是380MB纠结.为了多优化出一点可用内存费脑筋. IOS的任务管理和内存管理,跟windows是有很大差别的.很多FY习惯于用 windows的思维去看待 ...
- Python中内存管理的问题
Python中内存管理的问题 pyqtgraph实时显示占用内存 删除变量释放内存 后记 我的环境是python3+SublimeText.python是解释型语言,平常对内存关注得不多. pyqtg ...
- Linux中内存管理详解
Linux中内存管理 内存管理的主要工作就是对物理内存进行组织,然后对物理内存的分配和回收.但是Linux引入了虚拟地址的概念. 虚拟地址的作用 如果用户进程直接操作物理地址会有以下的坏处: 1. 用 ...
- Linux内核中内存管理相关配置项的详细解析3
接前一篇文章:Linux内核中内存管理相关配置项的详细解析2 5. 2:1 compression allocator (zbud) 对应配置变量为:CONFIG_ZBUD. 此项默认为选中(如果前一 ...
- iOS中内存管理方案
系统提供的有不同的内存管理方案,大致有如下三种: TaggedPointer (对于一些小对象,比如说NSNumber,NSString等采用此种方案) NONPOINTER_ISA (64位架构下i ...
- IOS面试_1.浅析内存管理
为了开学的面试,就在博客里总结一下面试会问到的问题,今天就来谈谈内存管理,看到一篇文章非常不错,http://vinceyuan.cnblogs.com/,深入浅出,推荐大家去看看! Objectiv ...
- iOS 下ARC的内存管理机制
本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇 ...
最新文章
- LibreOffice 支持无障碍辅助的 5 种方式
- 服务器负载均衡的部署方式
- 熊市利好,Bit-Z推出币圈最高返佣50%
- JavaScript debugger time out and defer.resolve
- 【Java】 剑指offer(67) 把字符串转换成整数
- 学习过程中的一些想法
- BestCoder Round #33
- 关于auto-keras训练cnn模型
- 解决Cell重用问题
- 检测同心圆_两“心”携手,共抗心衰——“同心圆”心衰俱乐部走进临安图书馆~...
- 网吧相关法律期待完善
- word文本框中插入文本框_如何在Word中打印隐藏的文本
- 【Python入门】Turtle海龟库:利用海龟画笔交互绘制字符旋涡
- 生成订单:三个表(Products,Orders,OrderItem)
- 用智能硬件“折叠时间”,外卖商家正在触摸的数字化未来
- R语言绘制Kaplan-Meier生存曲线
- 华为天猫官方旗舰店粉丝突破一千万
- Photoshop教程8000例。平时想做的各种效果完整郎阔!
- 2021最新 RocketMQ面试题精选(附刷题小程序)
- Element UI是什么?基本用法