There are a number of data types in the Core Foundation framework and the Foundation framework that can be used interchangeably. This capability, called toll-free bridging, means that you can use the same data type as the parameter to a Core Foundation function call or as the receiver of an Objective-C message. For example, NSLocale (see NSLocale Class Reference) is interchangeable with its Core Foundation counterpart, CFLocale (see CFLocale Reference). Therefore, in a method where you see an NSLocale * parameter, you can pass a CFLocaleRef, and in a function where you see a CFLocaleRef parameter, you can pass an NSLocale instance. You cast one type to the other to suppress compiler warnings, as illustrated in the following example.
NSLocale *gbNSLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"]; |
CFLocaleRef gbCFLocale = (CFLocaleRef) gbNSLocale; |
CFStringRef cfIdentifier = CFLocaleGetIdentifier (gbCFLocale); |
NSLog(@"cfIdentifier: %@", (NSString *)cfIdentifier); |
// logs: "cfIdentifier: en_GB" |
CFRelease((CFLocaleRef) gbNSLocale); |
| |
CFLocaleRef myCFLocale = CFLocaleCopyCurrent(); |
NSLocale * myNSLocale = (NSLocale *) myCFLocale; |
[myNSLocale autorelease]; |
NSString *nsIdentifier = [myNSLocale localeIdentifier]; |
CFShow((CFStringRef) [@"nsIdentifier: " stringByAppendingString:nsIdentifier]); |
// logs identifier for current locale |
Note from the example that the memory management functions and methods are also interchangeable—you can use CFRelease with a Cocoa object and release and autorelease with a Core Foundation object.
Note: When using garbage collection, there are important differences to how memory management works for Cocoa objects and Core Foundation objects. See “Using Core Foundation with Garbage Collection” for details.
Toll-free bridging has been available since Mac OS X v10.0. Table 13-1 provides a list of the data types that are interchangeable between Core Foundation and Foundation. For each pair, the table also lists the version of Mac OS X in which toll-free bridging between them became available.
本文深入探讨了CoreFoundation与Foundation框架中数据类型的互换能力,即toll-free桥接技术。通过实例展示了如何在不同框架间无缝传递数据,并介绍了可用的数据类型及其在不同版本OS中的兼容性。此外,文章还指出了内存管理函数和方法的互换使用,以及垃圾收集时内存管理的差异。
1万+

被折叠的 条评论
为什么被折叠?



