Toll-Free Bridging

剛剛趁有空在翻看蘋果開發(fā)文檔時撑碴,在NSDictionary類的介紹中看到

NSDictionary is toll-free bridged with its Core Foundation counterpart,CFDictionaryRef

大概意思是NSDictionary和它的Core Foundation的對象CFDictionaryReftoll-free bridged

toll-free bridged是什么意思库糠? 免費橋接述暂? 等價交換隅俘?

懵逼

然后好奇點了roll-free bridged,看了下它的官方文檔牙瓢。

大概摘抄如下:

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.

大致意思是:

Core Foundation框架和Foundation框架中有許多數(shù)據類型可以互換使用。該功能被稱為Toll-Free Bridging阅羹,意味著你可以把相同的數(shù)據類型作為Core Foundation函數(shù)調用的參數(shù)或者作為OC消息的receiver勺疼。 例如,NSLocale可以和它的Core Foundation對象CFLocale互換捏鱼。因此执庐,當你看到一個方法需要一個NSLocale *參數(shù),你可以傳入一個CFLocaleRef,當一個方法需要CFLocaleRef參數(shù)导梆,你可以傳入一個NSLocate實例轨淌。你可以把一種類型強制轉換為另一種類型來消除編譯器的警告

蘋果爸爸還很貼心的給出了一個??


image.png
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

打印:

cfIdentifier: en_GB
nsIdentifier: en_US

從示例中可以看到看尼,內存管理函數(shù)和方法也是可以互換的:我們可以將CFReleaseCocoa對象一起使用递鹉,也可以將release``autoreleaseCore Foundation對象一起使用。

下面這個表格列出了Core FoundationFoundation可以互換的數(shù)據類型

Core Foundation type Foundation class
CFArrayRef NSArray
CFAttributedStringRef NSAttributedString
CFBooleanRef NSNumber
CFCalendarRef NSCalendar
CFCharacterSetRef NSCharacterSet
CFDataRef NSData
CFDateRef NSDate
CFDictionaryRef NSDictionary
CFErrorRef NSError
CFLocaleRef NSLocale
CFMutableArrayRef NSMutableArray
CFMutableAttributedStringRef NSMutableAttributedString
CFMutableCharacterSetRef NSMutableCharacterSet
CFMutableDataRef NSMutableData
CFMutableDictionaryRef NSMutableDictionary
CFMutableSetRef NSMutableSet
CFMutableStringRef NSMutableString
CFNullRef NSNull
CFNumberRef NSNumber
CFReadStreamRef NSInputStream
CFRunLoopTimerRef NSTimer
CFSetRef NSSet
CFStringRef NSString
CFTimeZoneRef NSTimeZone
CFURLRef NSURL
CFWriteStreamRef NSOutputStream

需要注意的是藏斩,并不是所有的數(shù)據類型都是toll-free bridged的躏结,盡管它們的名字看起來像是支持toll-free bridged. 比如,NSRunLoopCFRunLoopRef并不是toll-free bridged, NSBundleCFBundleRef不是toll-free bridged, 另外 NSDateFormatterCFDateFormatterRef也不是toll-free bridged.

end
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末狰域,一起剝皮案震驚了整個濱河市媳拴,隨后出現(xiàn)的幾起案子黄橘,更是在濱河造成了極大的恐慌,老刑警劉巖禀挫,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拓颓,居然都是意外死亡语婴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門驶睦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來砰左,“玉大人,你說我怎么就攤上這事场航〔迹” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵溉痢,是天一觀的道長僻造。 經常有香客問我,道長孩饼,這世上最難降的妖魔是什么髓削? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮镀娶,結果婚禮上立膛,老公的妹妹穿的比我還像新娘。我一直安慰自己梯码,他們只是感情好宝泵,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著轩娶,像睡著了一般儿奶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鳄抒,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天廓握,我揣著相機與錄音,去河邊找鬼嘁酿。 笑死隙券,一個胖子當著我的面吹牛,可吹牛的內容都是我干的闹司。 我是一名探鬼主播娱仔,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼游桩!你這毒婦竟也來了牲迫?” 一聲冷哼從身側響起耐朴,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盹憎,沒想到半個月后筛峭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡陪每,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年影晓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片檩禾。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡挂签,死狀恐怖,靈堂內的尸體忽然破棺而出盼产,到底是詐尸還是另有隱情饵婆,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布戏售,位于F島的核電站侨核,受9級特大地震影響,放射性物質發(fā)生泄漏灌灾。R本人自食惡果不足惜芹关,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望紧卒。 院中可真熱鬧侥衬,春花似錦、人聲如沸跑芳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽博个。三九已至怀樟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盆佣,已是汗流浹背往堡。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留共耍,地道東北人虑灰。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像痹兜,于是被迫代替她去往敵國和親穆咐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內容

  • 相關文檔 Toll-Free BridgingToll-Free Bridged Types《編寫高質量iOS與O...
    水止云起閱讀 2,679評論 0 3
  • 關于什么是toll-free bridging在這里我就不進行解釋了,這里只說一下幾種casting的模式对湃。 在進...
    skyandlhs閱讀 469評論 0 0
  • 你知道世上最美的是什么嗎崖叫?是一瞬而過的流星,所留下一個愿望的期待嗎拍柒?是茫茫大海平靜表面下的暗流涌動嗎心傀?還是在蒙娜麗...
    李冰倩bollonmaster閱讀 738評論 4 31
  • 麥兜媽媽曾經說過一句話:“全世界的人不愛你,我都只愛你拆讯;全世界的人不信你脂男,我都只信你;我愛你愛到心肝里往果,我信你信到...
    減肥的女孩閱讀 178評論 0 0
  • 你所不知道外面的世界有多大疆液。 從小一直在家里附近讀書一铅,騎騎自行車就把小鎮(zhèn)主道溜達完陕贮,最遠就是大學去了溫州,3小時的...
    木說閱讀 198評論 0 0