自动引用计数器(四)-规则

在ARC有效的情况下编译源码,必须遵守一定的规则,下面就是ARC的规则:
·不能使用retain/release/retainCount/autorelease
·不能使用NSAllocateObject/NSDeallocateObject
·必须遵守内存管理的方法命名规则
·不要显示的调用dealloc
·使用@autoreleasepoo块代替NSAutoreleasePool
·不能使用区域NSZone
·对象类型变量不能作为c语言结构体的成员
·显示转换id和void
一、不能使用retain、release、retainCount、autorelease
二、不能使用NSAllocateObject/NSDeallocateObject
三、必须遵守内存管理的方法命名规则
在ARC无效的时候,用于对象生成/对象持有的方法必须遵守以下规则。
·alloc
·new
·copy
·mutableCopy
四、不要显示的调动dealloc
ARC会自动对此进行处理,因为不必书写[super dealloc],dealloc中只需记述废弃对象时所必须的处理。
五、对象类型变量不能作为c语言结构体的成员
c语言的结构体或者共用体成员中,如果存在oc对象类型变量,便会引起编译错误。
六、显示转换id和void*
这里写图片描述
但是在ARC有效时候便会引起编译器错误。
id类型或对象变量赋值给void*或者逆向赋值时需要进行特定的转换。如果只想单纯赋值可以使用“_bridge”转换。

id obj=[[NSObject alloc]init];
void p=(__bridge void )obj;
id 0=(_bridge id)p;

其安全性与赋值给_unsafe_unretained修饰符很相近,这样子赋值安全性会更低。另外还有两种转换。

ARC有效时:
id obj=[[NSObject alloc]init];
void p=(_bridge_retained void )obj;
ARC无效时:

这里写图片描述

Core Foundation框架是一组c语言接口,而Foundation是一组OC接口。如果将Foundation于CoreFoundation混合使用,则可以利用两个框架支架的“too_free bridging”。所谓的Toll-free bridging是说您可以在某个框架的方法或函数同时使用Core Foundatio和Foundation 框架中的某些类型。
ARC仅管理Objective-C指针(retain、release、autorelease),不管理CoreFoundation指针,CF指针由人工管理,手动的CFRetain和CFRelease来管理,注,CF中没有autorelease。
__bridge只做类型转换,但是不修改对象(内存)管理权;
__bridge_retained(也可以使用CFBridgingRetain)将Objective-C的对象转换为Core Foundation的对象,同时将对象(内存)的管理权交给我们,后续需要使用CFRelease或者相关方法来释放对象;
__bridge_transfer(也可以使用CFBridgingRelease)将Core Foundation的对象转换为Objective-C的对象,同时将对象(内存)的管理权交给ARC。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值