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 方法
什么都不需要做,直接赋值即可

  1. 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

  1. weak
    只能使用在ARC机制下 当属性的类型是OC对象的时候
    只有出现了循环引用的时候,1端strong 1端weak

  2. readonly readwrite
    . 无论是ARC 还是MRC 都可以使用

  3. 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相关推荐

  1. IOS基础知识-ARC,分类,Block

    IOS基础知识-ARC,分类,Block ARC快速入门 本小节知识点: 1.ARC机制判断 2.ARC快速使用 ARC基本概念 本小节知识点: 1.什么是ARC 2.ARC的注意点和优点 3.ARC ...

  2. iOS基础问答面试题连载-附答案

    2017-02-02 timhbw CocoaChina 以下是一些自己收集的比较基础的问题(大神可以忽略),附上答案,方便大家阅读.俗话说得好,基础不牢,地动山摇.文章末尾会提供PDF版的文档,方便 ...

  3. IOS基础之NSFounation框架的NSDictionary,NSMutableDictionary的使用

    IOS基础之NSFounation框架的NSDictionary,NSMutableDictionary的使用 // // main.m // Day11-NSFoudation框架 // // Cr ...

  4. IOS基础之Foundation框架常用类NSFileManager,DSDate,CGPoint,CGSize,copy,单例

    IOS基础之Foundation框架常用类NSFileManager,DSDate,CGPoint,CGSize,copy,单例 1.01_FileManager学习 // // main.m // ...

  5. iOS开发之ARC(自动引用计数)

    iOS开发之ARC(自动引用计数) 英文原文:Automatic Reference Counting on iOS 参与翻译(4人): 纶巾客, showme, 李远超, 王宇龙 自动引用计数(AR ...

  6. 黑马程序员-iOS基础-Objective-C基础(六)内存管理

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 黑马程序员-iOS基础-Objective-C基础(六)内存管理 一.内存管理的必要性 移动设备 ...

  7. IOS基础之iPad的屏幕旋转方向判断

    IOS基础之iPad的屏幕旋转方向判断 #pragma mark - 屏幕旋转 - (void)viewWillTransitionToSize:(CGSize)size withTransition ...

  8. IOS基础之segue使用,

    IOS基础之segue使用, segue是接线,接入的意思.控制器与控制器之间的连线. sourceViewControl来源控制器 destinationViewController 目标控制器,以 ...

  9. IOS基础之打砖块项目演练

    IOS基础之打砖块项目演练 本项目涉及CADisplayLink核心动画,各个控件的使用,运行循环,逻辑判断等,if和for,frame坐标的改变,CGPoint结构体,成员变量的赋值,两种手势,拖拽 ...

最新文章

  1. LeetCode简单题之二叉树中第二小的节点
  2. 4.4 Triplet 损失-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  3. 浅谈AQS(AbstractQueuedSynchronizer,同步队列)
  4. Python之Pandas绘图,设置显示中文问题
  5. 敏捷开发免费管理工具——火星人预览之五:常见问题问答
  6. 246. Strobogrammatic Number
  7. python的paramiko模块
  8. cvc-complex-type.2.3: Element 'beans' cannot have character [children] 博客分类: Spring
  9. typedef的一些用途
  10. matplotlib库的pyplot的plot()函数详解
  11. 高级软件工程(2022春)课程总结
  12. 训练集、验证集以及测试集的区别
  13. 微信小程序 SOTER 生物认证DEMO,指纹识别
  14. 核心微生物分析_科学网—微生物组核心OTU鉴定usearch otutab_core - 刘永鑫的博文...
  15. 什么样的知识付费系统功能,更有利于平台与讲师发展?
  16. Hadoop安装配置(转自虾皮工作室)
  17. 麒麟安装tomcat
  18. 关于IE浏览器出现“XMLHttpRequest: 网络错误 0x80070005, 拒绝访问”的解决方案
  19. MobCtrl.exe服务器端软件下载
  20. Airtest:Windows桌面应用自动化测试(一)

热门文章

  1. myeclipse搭建php,MyEclipse配置JDK类库的简易流程
  2. html语言右对齐,在HTML中右对齐块元素
  3. linux小菜鸟入门,《Linux菜鸟入门》初识linux基础(示例代码)
  4. arouter跨module传递消息_利用ARouter实现组件间通信,解决子模块调用主模块问题...
  5. 所有配置_Springboot 打印所有配置
  6. pkl格式数据 训练集_Detectron2训练自己的数据集手把手指导
  7. 回老家还是继续北上广?
  8. 为什么C语言函数不能返回数组,却可以返回结构体?
  9. 十八般武艺教你如何解决问题
  10. assignment symbolic automaton verilog设计