oc 内存管理

拥有着权限:

rop(可保留指针)   non-rop(不可保留指针)

我们不能把单纯的将rop 和 non-rop进行转换 因为arc需要知道这个指针的所有权信息


_bridge  操作符:不改变指针的所有权  所有权归rop所有

_bridge_retained : 所有权会转移到non-rop  调用的时候其实在对象身上进行了retain 当non-rop不用的时候需要进行release

_bridge_transfer:把non-rop 对对象的所有权  转交给 rop 


c的结构体是不能拥有rop的 可以利用 void*  xxx  和 桥接解决


在arc下不可以调用的方法  retain retainCount  release   autorelease  dealloc

在arc下不可以重写的方法  retain retainCount  release   autorelease 

dealloc 方法不可以调用  [super dealloc]


保留环:

某创建a时创建了b  (a 1  b 1)  又因为b强引用a 故(a 2 b 1) 当对象不需要a的时候对a进行释放    (a 1 b 1) 没有对象对a 或者 b 又引用  故 a b 内存永远不会释放 导致了内存的泄漏


垃圾回收:可以通过编译器选项进行设置  编译器会跟踪对象  当对象不再被其他对象引用时 就把他释放掉 但是释放的时机是不确定的  



arc只是在编译期间自动添加了内存管理的消息(自动添加一些函数retain 等)   autoreleasepool 是自动释放池  两者并不冲突




你可能感兴趣的:(objective,-,c,基础教程)