Core Foundation框架 (CoreFoundation.framework) 是一组C语言接口,它们为iOS应用程序提供基本数据管理和服务功能。
简单来说 就是 在提供开发iOS - APP中 的基本类型和一些扩展功能。举个例子:
CFStringRef 和 NSString* 是一样的, 可以互转。(注意,是NSString*,因为CFStringRef是个指针)
关于Core Foundation,网上讲的最多的就是toll-free bridge。
简单的复述下:
__bridge只做类型转换,但是不修改对象(内存)管理权;
__bridge_retained(也可以使用CFBridgingRetain)将Objective-C的对象转换为Core Foundation的对象,同时将对象(内存)的管理权交给我们,后续需要使用CFRelease或者相关方法来释放对象;
__bridge_transfer(也可以使用CFBridgingRelease)将Core Foundation的对象转换为Objective-C的对象,同时将对象(内存)的管理权交给ARC。
再举一个非常常用的例子:
- (NSString *)getPinyinWithStr:(NSString *)str {
NSString* ret;
NSMutableString *lin = [[NSMutableString alloc] initWithString:str];
if (CFStringTransform((__bridge CFMutableStringRef)lin, 0, kCFStringTransformMandarinLatin, NO)) {
if (CFStringTransform((__bridge CFMutableStringRef)lin, 0, kCFStringTransformStripDiacritics, NO)) {
ret = [lin uppercaseString];
}
}
return ret;
}
这是一个把中文转拼音的函数。里面就用到了CoreFoudation里面的CFStringTransform函数。
个人理解:CoreFoundation就是一个带了很多方法的库,这些方法是以c语言的接口来使用的(至于为什么,还是乔布斯当初被自己创立的公司赶出去的锅)。
然后为了调用里面很实用的功能,我们必须把Foundation 里面的类型,转成CoreFoundation里面的类型。
参考