ARC机制

1 Automatic Reference Counting,自动引用计数
ARC只是相对于MRC(Manual Reference Counting或称为非ARC),是编译器(时)特性,而不是运行时特性,更不是垃圾回收器(GC)。
2ARC基本规则
retain, release, autorelease, dealloc由编译器自动插入,不能在代码中调用

3ARC的修饰符
ARC主要提供了4种修饰符,他们分别是:__strong,__weak,__autoreleasing,__unsafe_unretained。

__strong
表示引用为强引用。对应在定义property时的”strong”。所有对象只有当没有任何一个强引用指向时,才会被释放。

注意:如果在声明引用时不加修饰符,那么引用将默认是强引用。当需要释放强引用指向的对象时,需要将强引用置nil。

__weak
表示引用为弱引用。对应在定义property时用的”weak”。弱引用不会影响对象的释放,即只要对象没有任何强引用指向,即使有100个弱引用对象指向也没用,该对象依然会被释放。不过好在,对象在被释放的同时,指向它的弱引用会自动被置nil,这个技术叫zeroing weak pointer。这样有效得防止无效指针、野指针的产生。__weak一般用在delegate关系中防止循环引用或者用来修饰指向由Interface Builder编辑与生成的UI控件。

__autoreleasing
表示在autorelease pool中自动释放对象的引用,和MRC时代autorelease的用法相同。定义property时不能使用这个修饰符,任何一个对象的property都不应该是autorelease型的。
4 ARC使用
1、当myClass.delegate使用weak时,
不会出现互相引用问题,也不会出现crash(引用被释放)问题,
引用关系如下(假设myViewController由Somebody持有):

上图引用关系分析:
第一行:
Somebody创建(持有)myViewController,所以myViewController的引用计数为1。
myViewController持有myClass,所以myClass的引用计数为1。
myClass通过成员delegate引用myViewController,但使用weak弱引用,所以引用计数不受影响。
第二行:
如果Somebody释放myViewController,则myViewController引用计数减1,变成0,此时myViewController自己将会被释放(引用计数是0),并减少所持有对象(myClass)的引用计数。
第三行:
myclass引用计数为0,被释放,由于是delegate是weak属性的,所以delegate将自动被设置为空。

2、当myClass.delegate使用strong时,
会出现相互引用问题,导致对象无法被释放。
引用关系如下:
这里写图片描述
第一行:
Somebody创建(持有)myViewController,所以myViewController的引用计数为1。
myViewController持有myClass,所以myClass的引用计数为1。
myClass通过成员delegate引用myViewController,但使用strong引用,所以引用计数加1,变成2。
第二行:
如果Somebody释放myViewController,则myViewController引用计数减1,变成1,此时myViewController不会被释放,myclass引用计数为1,也不会被释放,这样就造成了互相引用问题。
而且没有外部对象在引用myViewController或myclass,造成了myViewController和myclass无法被释放。

3、当myClass.delegate使用weak时,如果有另一个Somebody同时持有了myClass,
由于weak可以自动置nil,所以不会出现crash(引用被释放)问题,
则引用关系如下:

第一行:
Somebody创建(持有)myViewController,所以myViewController的引用计数为1。
myViewController持有myClass,所以myClass的引用计数为1。
myClass通过成员delegate引用myViewController,但使用weak弱引用,所以引用计数不受影响。
第二行:
新的Somebody持有同一个myClass,导致myClass引用计数加1,变成2。
第三行:
如果Somebody释放myViewController,则myViewController引用计数减1,变成0,此时myViewController自己将会被释放(引用计数是0),并减少所持有对象(myClass)的引用计数。使myClass引用计数减1,变成1。由于myClass引用myViewController的delegate是weak属性的,所以delegate将自动被设置为空,不会出现crash(引用被释放)问题。
注意,如果myClass引用myViewController的delegate是assign的话,则delegate不会被自动设置为空,将导致delegate再次调用myViewController时出错(myViewController已经释放了)。
第四行:
Somebody正常持有myClass,如果此时Somebody释放myClass,则myClass引用计数减1并释放,不会出现任何问题。

CH341A编程器是一款广泛应用的通用编程设备,尤其在电子工程和嵌入式系统开发领域中,它被用来烧录各种类型的微控制器、存储器和其他IC芯片。这款编程器的最新版本为1.3,它的一个显著特点是增加了对25Q256等32M芯片的支持。 25Q256是一种串行EEPROM(电可擦可编程只读存储器)芯片,通常用于存储程序代码、配置数据或其他非易失性信息。32M在这里指的是存储容量,即该芯片可以存储32兆位(Mbit)的数据,换算成字节数就是4MB。这种大容量的存储器在许多嵌入式系统中都有应用,例如汽车电子、工业控制、消费电子设备等。 CH341A编程器的1.3版更新,意味着它可以与更多的芯片型号兼容,特别是针对32M容量的芯片进行了优化,提高了编程效率和稳定性。26系列芯片通常指的是Microchip公司的25系列SPI(串行外围接口)EEPROM产品线,这些芯片广泛应用于各种需要小体积、低功耗和非易失性存储的应用场景。 全功能版的CH341A编程器不仅支持25Q256,还支持其他大容量芯片,这意味着它具有广泛的兼容性,能够满足不同项目的需求。这包括但不限于微控制器、EPROM、EEPROM、闪存、逻辑门电路等多种类型芯片的编程。 使用CH341A编程器进行编程操作时,首先需要将设备通过USB连接到计算机,然后安装相应的驱动程序和编程软件。在本例中,压缩包中的"CH341A_1.30"很可能是编程软件的安装程序。安装后,用户可以通过软件界面选择需要编程的芯片类型,加载待烧录的固件或数据,然后执行编程操作。编程过程中需要注意的是,确保正确设置芯片的电压、时钟频率等参数,以防止损坏芯片。 CH341A编程器1.3版是面向电子爱好者和专业工程师的一款实用工具,其强大的兼容性和易用性使其在众多编程器中脱颖而出。对于需要处理25Q256等32M芯片的项目,或者26系列芯片的编程工作,CH341A编程器是理想的选择。通过持续的软件更新和升级,它保持了与现代电子技术同步,确保用户能方便地对各种芯片进行编程和调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值