Toll-Free Bridging
翻譯自Apple.
我們?nèi)粘i_發(fā)中一般使用Fundation的類,其中有一些是跟Core Fundation 框架中的類是可以進(jìn)行內(nèi)部轉(zhuǎn)換的,這個(gè)特性就被稱之為Toll-Free Bridging
,意味著你可以使用同一種數(shù)據(jù)結(jié)構(gòu)作為Core Fundation 中函數(shù)的參數(shù),或者作為Fundation中方法的參數(shù).例如NSLocal與CFLocal就是Toll-Free Bridging 的.所以,如果你在使用一個(gè)需要傳遞(NSLocal *)類型的參數(shù)的OC方法的時(shí)候,你可以傳遞一個(gè)CFLocalRef類型的值進(jìn)去.反過來也一樣.你可以只創(chuàng)建以一種類型的對(duì)象s來避免編譯器的警告.
例如以下的例子
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
這里需要注意的是,我們用到的內(nèi)存管理語句同樣是Toll-Free Bridging的,所以你可以使用CFRelease來釋放Cocoa對(duì)象,也可以吧release和autorelease用在Core Fundation的對(duì)象上
但是如果使用garbage collectin 進(jìn)行內(nèi)存管理的話,Core Fundation 和Cocoa對(duì)象會(huì)有很大的差異.
下面有一張對(duì)照表,列出了在Core Fundation和在Fundation中是Toll-Free Bridging轉(zhuǎn)換的
| Core Fundation Type| Fundation class | Availability |
| : --------- : | : ------ : |: ------ :|
|CFArrayRef| NSArray| OS X 10.0|
|CFAttributedStringRef| NSAttributedString|OS X 10.4|
|CFBooleanRef|NSNumber|OS X 10.0|
|CFCalendarRef|NSCalendar|OS X 10.4|
|CFCharacterSetRef|NSCharacterSet|OS X 10.0|
|CFDataRef|NSData|OS X 10.0|
|CFDateRef|NSDate|OS X 10.0|
|CFDictionaryRef|NSDictionary|OS X 10.0|
|CFErrorRef|NSError|OS X 10.5|
|CFLocaleRef|NSLocale|OS X 10.4|
|CFMutableArrayRef|NSMutableArray|OS X 10.0|
|CFMutableAttributedStringRef|NSMutableAttributedString|OS X 10.4|
|CFMutableCharacterSetRef|NSMutableCharacterSet|OS X 10.0|
|CFMutableDataRef|NSMutableData|OS X 10.0|
|CFMutableDictionaryRef|NSMutableDictionary|OS X 10.0|
|CFMutableSetRef|NSMutableSet|OS X 10.0|
|CFMutableStringRef|NSMutableString|OS X 10.0|
|CFNullRef|NSNull|OS X 10.2|
|CFNumberRef|NSNumber|OS X 10.0|
|CFReadStreamRef|NSInputStream|OS X 10.0|
|CFRunLoopTimerRef|NSTimer|OS X 10.0|
|CFSetRef|NSSet|OS X 10.0|
|CFStringRef|NSString|OS X 10.0|
|CFTimeZoneRef|NSTimeZone|OS X 10.0|
|CFURLRef|NSURL|OS X 10.0|
|CFWriteStreamRef|NSOutputStream|OS X 10.0|
- 注意:并不是所有的類都是Toll-Free Bridging 的,例如NSRunLoop和CFRunLoopRef就不是,NSDateFormate和CFDateFormateRef也不是.