Core Foundation 和 Foundation 之間的關(guān)系

轉(zhuǎn)載自(點(diǎn)擊打開鏈接)

題目你也可以理解為 Core Foundation 和 Objective-C 之間的關(guān)系驰怎。

1)歷史概要

先來說說「Core Foundation」(以下簡稱CF)的歷史吧

當(dāng)年喬布斯被自己創(chuàng)辦的公司驅(qū)逐后赌躺,成立了「NeXT Computer」,其實(shí)做的還是老本行:賣電腦拒课,但依舊不景氣徐勃。好在NeXTSTEP系統(tǒng)表現(xiàn)還不錯(cuò),虧損不至于太嚴(yán)重早像。正好此時(shí)蘋果的市場份額大跌僻肖,急需一個(gè)新的操作系統(tǒng),結(jié)果大家都知道了卢鹦,喬布斯借此收購臀脏,重新回到了蘋果。

這里就牽扯到了一個(gè)問題冀自,如何讓舊有的系統(tǒng)(Mac OS 9)和NeXTSTEP合成為一個(gè)新系統(tǒng)揉稚?這就需要一個(gè)更為底層的核心庫可以供Mac Toolbox和OPENSTEP雙方調(diào)用。CF就這么誕生了熬粗。

CF是由C語言實(shí)現(xiàn)的搀玖,而不是Objective-C,所以如果用到了CF驻呐,就需要手動(dòng)管理內(nèi)存灌诅,ARC是無能為力的。當(dāng)然因?yàn)镃F和Foundation之間的友好關(guān)系含末,它們之間的管理權(quán)也是可以移交的延塑,這個(gè)后面再說。

CF提供了基礎(chǔ)功能答渔,如CFString,CFDate,CFNumber等等,以CFString為例侥涵,CFString和NSString之間是什么關(guān)系沼撕?NSString其實(shí)是一個(gè)「類簇」宋雏,也就是抽象接口,所以String Objects并不是NSString實(shí)例务豺,而是實(shí)現(xiàn)了NSString方法的私有類的實(shí)例磨总,也就是CFString。

NSLog(NSStringFromClass([@"Some Class" class]));

# output __NSCFConstantString

同時(shí)NSStrings和CFStrings之間可以自由轉(zhuǎn)換笼沥,也就是

「toll free bridging」蚪燕。比如:

CFStringRef aCFString = (CFStringRef)aNSString;

NSString *aNSString = (NSString *)aCFString;

2)__bridge

? ? 因?yàn)榫幾g器無法自動(dòng)管理CF的內(nèi)存,所以CF對(duì)象在使用完后奔浅,需要手動(dòng)釋放(CFRelease)馆纳。如果使用ARC來管理內(nèi)存,蘋果提供了3種方法來處理

__bridge只是在CF和OC之間傳遞指針汹桦,其他的事啥也沒干鲁驶,所以轉(zhuǎn)換成CF時(shí),還是要手動(dòng)釋放內(nèi)存舞骆。

CFStringRef aCFString = CFStringCreateWithCString(NULL, "test", kCFStringEncodingASCII);

NSString *aNSString = (__bridge NSString *)aCFString;

(void)aNSString;

CFRelease(aCFString);

3)__bridge_retained

__bridge_retained或者CFBridgingRetain()钥弯,將Objective-C對(duì)象轉(zhuǎn)換為Core Foundation對(duì)象,把對(duì)象所有權(quán)橋接給Core Foundation對(duì)象督禽,同時(shí)剝奪ARC的管理權(quán)脆霎,后續(xù)需要開發(fā)者使用CFRelease或者相關(guān)方法手動(dòng)來釋放對(duì)象。

4)__bridge_transfer

__bridge_transfer 或者 CFBridgingRelease() 將非Objective-C對(duì)象轉(zhuǎn)換為Objective-C對(duì)象狈惫,同時(shí)將對(duì)象的管理權(quán)交給ARC睛蛛,開發(fā)者無需手動(dòng)管理內(nèi)存。

最后虱岂,因?yàn)镃F是用C實(shí)現(xiàn)的玖院,且處于下層,所以執(zhí)行速度上會(huì)比Foundation稍微快一點(diǎn)第岖,不過也就是一點(diǎn)點(diǎn)难菌,幾乎察覺不到。相比Foundation帶來的ARC內(nèi)存管理和更多的API蔑滓,開發(fā)上的效率會(huì)大幅提升郊酒,所以還是盡量多的使用OC。

5)總結(jié):

Core Foundation(CF)實(shí)現(xiàn)的是C接口键袱, Cocoa Foundation實(shí)現(xiàn)的是Obj-C接口

因?yàn)锳RC是用Obj-C實(shí)現(xiàn)的燎窘,所以ARC只能管理Foundation對(duì)象,無法管理CF對(duì)象

但是OC和CF是可以相互轉(zhuǎn)化的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蹄咖,一起剝皮案震驚了整個(gè)濱河市褐健,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖蚜迅,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舵匾,死亡現(xiàn)場離奇詭異,居然都是意外死亡谁不,警方通過查閱死者的電腦和手機(jī)坐梯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刹帕,“玉大人吵血,你說我怎么就攤上這事⊥的纾” “怎么了蹋辅?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長亡蓉。 經(jīng)常有香客問我晕翠,道長,這世上最難降的妖魔是什么砍濒? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任淋肾,我火速辦了婚禮,結(jié)果婚禮上爸邢,老公的妹妹穿的比我還像新娘樊卓。我一直安慰自己,他們只是感情好杠河,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布碌尔。 她就那樣靜靜地躺著,像睡著了一般券敌。 火紅的嫁衣襯著肌膚如雪唾戚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天待诅,我揣著相機(jī)與錄音叹坦,去河邊找鬼溜歪。 笑死施籍,一個(gè)胖子當(dāng)著我的面吹牛刘离,可吹牛的內(nèi)容都是我干的柱彻。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼僧须,長吁一口氣:“原來是場噩夢啊……” “哼怕犁!你這毒婦竟也來了哨苛?” 一聲冷哼從身側(cè)響起扣甲,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤篮赢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體启泣,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡媒咳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了种远。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡顽耳,死狀恐怖坠敷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情射富,我是刑警寧澤膝迎,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站胰耗,受9級(jí)特大地震影響限次,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜柴灯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一卖漫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赠群,春花似錦羊始、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至冬三,卻和暖如春匀油,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背勾笆。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工敌蚜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人匠襟。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓钝侠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酸舍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子帅韧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容