ios基础之 ARC
ios ARC
1 什么是ARC
Automatic Reference Counting 自动引用计数 即ARC
顾名思义 系统自动的帮助我们去计算对象的引用计算器的值
可以说是WDC 2011 和IOS
2 ARC 机制 下 对象何时被释放
本质
在程序使用ARC非常简单,只需要想像往常一样写代码
只不过永远不要写retain release autorelease 永远不要手动的调用 dealloc 这三个关键字就好 这是ARC的最本质的原则。
4 确认程序是否开启ARC机制
1) 默认情况下 XCode 开启ARC机制
2) ARC机制下,不允许调用retain release 和 releaseCount autorelease方法
3) 在dealloc 中不允许[super dealloc];
这两种情况叫做没有任何强指针指向对象
1 指向对象的所有强指针被回收掉
2 指向对象的所有的强指针赋值为nil
ARC 机制
ARC机制下 释放1个对象的标准是 没有任何强指针指向对象的时候 ,对象就会被释放
如果这个时候有弱指针指向,也会被释放。
最重要1点 我们不能使用 1个弱指针来存储创建一个新的对象
这样的话 刚刚创建出来的对象,就没有任何强指针指向,创建出来就会被回收。
int main(int argc,const char * argv[])
{
@autoreleasepool
{
__weak Person *p1 = [[Person alloc] init];//错误的写法
}
return 0;
}
3) 在ARC机制下, 当对象被回收的时候,原来指向这个对象的弱指针会被自动设置为nil
这两种情况叫做没有任何强指针指向对象
1 指向对象的所有强指针被回收掉
2 指向对象的所有的强指针赋值为nil
4 在ARC 机制下 @property 参数不能使用 retain
因为retain代表生成的setter 方法是MRC的标准的内存管理代码
而我们在ARC的机制下 不需要这些代码
所以 在ARC的机制下 的setter 方法
什么都不需要做,直接赋值即可
- ARC机制下我们关注的重点是
6.当1个类的熟悉是一个OC对象 的时候,这个属性 必须声明为 强类型变量;
不写__strong 默认是强类型指针。
如何控制@property 生成的私有属性 是一个强类型还是弱类型的呢
@property(nonatomic,week)Car *car ;
@property(nonatomic,strong)Car *car ;
默认不写, 就是strong类型
使用建议
在ARC机制下
如果属性的是OC对象的类型是使用strong
在ARC机制下
如果属性的不是OC对象的类型是使用assign
strong 和weak都是应用在属性的类型是OC对象的时候
,属性的类型不是OC对象的时候就使用assign
基本类型使用assign
-----ARC
在ARC机制下 将MRC下的retain换位strong
在ARC 机制下 ,当两个对象相互引用的时候 ,如果两边都使用strong 那么就会先内存泄漏
解决方案 1 端使用strong 1端使用weak
1 开发程序分为ARC 和MRC
2 与多线程相关的参数
atomic 默认值 安全 但是效率低下
nonatomic 不安全 但是效率高
无论在ARC还是MRC都可以使用
使用建议 无论是ARC还是MRC都使用nonatomic
3 .retain 只能用在MRC模式下,代表生成的setter 方法是标准的内存管理代码
当属性的类型是OC对象的,绝大多数的情况下使用retain 只有出行了循环的引用1边retain 1边assign
4 assign
在ARC 和MRC的模式下都可以使用assign
当属性的类型是非OC对象的时候 使用assign
5 strong 只能使用下ARC机制下
当属性的类型是OC对象的类型的使用,绝大多数使用strong
只有出现了循环引用的时候 1端使用strong 1 端 weak
weak
只能使用在ARC机制下 当属性的类型是OC对象的时候
只有出现了循环引用的时候,1端strong 1端weakreadonly readwrite
. 无论是ARC 还是MRC 都可以使用setter getter 无论是. 是ACR 还是MRC下都可以改
在ARC的机制下 原来使用retain的用strong
出现循环的引用的社时候,MRC 1边 retain 1 边 assign
ARC 下 1 边 strong 1 边 weak
1 有可能遇到的问题是
程序使用的是ARC机制开发的但是其中某一些类使用的MRC的
2 使用命令 -fno-objc-arc 对MRC写的类添加如下命令
可以将整个MRC程序转为ARC程序
ios基础之 ARC相关推荐
- IOS基础知识-ARC,分类,Block
IOS基础知识-ARC,分类,Block ARC快速入门 本小节知识点: 1.ARC机制判断 2.ARC快速使用 ARC基本概念 本小节知识点: 1.什么是ARC 2.ARC的注意点和优点 3.ARC ...
- iOS基础问答面试题连载-附答案
2017-02-02 timhbw CocoaChina 以下是一些自己收集的比较基础的问题(大神可以忽略),附上答案,方便大家阅读.俗话说得好,基础不牢,地动山摇.文章末尾会提供PDF版的文档,方便 ...
- IOS基础之NSFounation框架的NSDictionary,NSMutableDictionary的使用
IOS基础之NSFounation框架的NSDictionary,NSMutableDictionary的使用 // // main.m // Day11-NSFoudation框架 // // Cr ...
- IOS基础之Foundation框架常用类NSFileManager,DSDate,CGPoint,CGSize,copy,单例
IOS基础之Foundation框架常用类NSFileManager,DSDate,CGPoint,CGSize,copy,单例 1.01_FileManager学习 // // main.m // ...
- iOS开发之ARC(自动引用计数)
iOS开发之ARC(自动引用计数) 英文原文:Automatic Reference Counting on iOS 参与翻译(4人): 纶巾客, showme, 李远超, 王宇龙 自动引用计数(AR ...
- 黑马程序员-iOS基础-Objective-C基础(六)内存管理
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 黑马程序员-iOS基础-Objective-C基础(六)内存管理 一.内存管理的必要性 移动设备 ...
- IOS基础之iPad的屏幕旋转方向判断
IOS基础之iPad的屏幕旋转方向判断 #pragma mark - 屏幕旋转 - (void)viewWillTransitionToSize:(CGSize)size withTransition ...
- IOS基础之segue使用,
IOS基础之segue使用, segue是接线,接入的意思.控制器与控制器之间的连线. sourceViewControl来源控制器 destinationViewController 目标控制器,以 ...
- IOS基础之打砖块项目演练
IOS基础之打砖块项目演练 本项目涉及CADisplayLink核心动画,各个控件的使用,运行循环,逻辑判断等,if和for,frame坐标的改变,CGPoint结构体,成员变量的赋值,两种手势,拖拽 ...
最新文章
- LeetCode简单题之二叉树中第二小的节点
- 4.4 Triplet 损失-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
- 浅谈AQS(AbstractQueuedSynchronizer,同步队列)
- Python之Pandas绘图,设置显示中文问题
- 敏捷开发免费管理工具——火星人预览之五:常见问题问答
- 246. Strobogrammatic Number
- python的paramiko模块
- cvc-complex-type.2.3: Element 'beans' cannot have character [children] 博客分类: Spring
- typedef的一些用途
- matplotlib库的pyplot的plot()函数详解
- 高级软件工程(2022春)课程总结
- 训练集、验证集以及测试集的区别
- 微信小程序 SOTER 生物认证DEMO,指纹识别
- 核心微生物分析_科学网—微生物组核心OTU鉴定usearch otutab_core - 刘永鑫的博文...
- 什么样的知识付费系统功能,更有利于平台与讲师发展?
- Hadoop安装配置(转自虾皮工作室)
- 麒麟安装tomcat
- 关于IE浏览器出现“XMLHttpRequest: 网络错误 0x80070005, 拒绝访问”的解决方案
- MobCtrl.exe服务器端软件下载
- Airtest:Windows桌面应用自动化测试(一)
热门文章
- myeclipse搭建php,MyEclipse配置JDK类库的简易流程
- html语言右对齐,在HTML中右对齐块元素
- linux小菜鸟入门,《Linux菜鸟入门》初识linux基础(示例代码)
- arouter跨module传递消息_利用ARouter实现组件间通信,解决子模块调用主模块问题...
- 所有配置_Springboot 打印所有配置
- pkl格式数据 训练集_Detectron2训练自己的数据集手把手指导
- 回老家还是继续北上广?
- 为什么C语言函数不能返回数组,却可以返回结构体?
- 十八般武艺教你如何解决问题
- assignment symbolic automaton verilog设计