cocoa 内存管理指引

高级内存管理主要讲述的是手动retain/release(MRR)的内容,如果使用ARC,可以参考这里

这里主要列举下ARC下内存管理的一些要点,当然MRR也需要多加参考

先介绍下Toll-Free Bridged类型 的概念

指的是core foundation中可与foundation中对应的类型互换使用的情况,比如CFLocale可以和NSLocale互换使用,作为方法调用中的receiver或参数传递时。但并不是所有类都有可互换的类,具体可Toll-Free Bridged的所有类型可以参考。

在使用可互换的类型互相转换时,需要注意两点,第一,显式转换类型,第二,注意维护对象生命期。

比如编译器知道从UIColor的CGColor方法返回的CGColor是不会持有的,也就是不会自动管理core foundation对象的生命周期,必须使用适当的类型转换才可以

想持有core foundation中的对象时,要进行适当的类型转换

上述示例中的id用得其实并不太对,因为id是一个NSObject的指针,但官方示例说可以这么用,那应该就是可以用的意思吧,而且示例用的也不是core foundation中的类,理解其想表达的重点是在Foundation中使用时需要转换即可。

在core Foundation与object-C之间转换时可以使用显式转换操作符也可以使用等效的Core Foundation-style宏:

1 __bridge 将一个指针在oc和core foundation之间转换且不涉及所有权的转移

2 __bridge_retained或者CFBridgingRetain(宏) 将一个oc指针转换到core foundation指针并进行所有权的转移,这意味着在必要的时候要使用CFRelease或类似的函数释放其所有权

3 __bridge_transfer或者CFBridgingRelease将非oc指针转换到oc指针,同时转移所有权到ARC,从此ARC负责释放其所有权



。。。

你可能感兴趣的:(cocoa 内存管理指引)