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

  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程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值