IOS UIKIT_EXTERN, __attribute__((visibility ("default"))) 是啥玩意

IOS UIKIT_EXTERN, __attribute__((visibility ("default"))) 是啥玩意?轉(zhuǎn)載(http://www.cnblogs.com/fortunely/p/4681635.html)

問題提出

在學(xué)習(xí)IOS時(shí)候挤安,碰到一個(gè)函數(shù)NSStringFromCGPoint (UIGeometry.h)

其原型是 UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point);

原型分析

NSString* , CGPoint好理解, 前者是庫自帶的字符串類型, 后者是一個(gè)表示2維平面上的點(diǎn)的結(jié)構(gòu)體辫秧。但是UIKIT_EXTERN是什么呢蓖救?

查找發(fā)現(xiàn)

UIKitDefines.h

1#ifdef__cplusplus2#defineUIKIT_EXTERN? ? ? ? extern "C" __attribute__((visibility ("default")))3#else4#defineUIKIT_EXTERN? ? ? ? ? ? extern __attribute__((visibility ("default")))5#endif67#defineUIKIT_STATIC_INLINE? ? static inline

下面一行一行來看

line1:#ifdef__cplusplus, 說的是如果定義了__cplusplus宏標(biāo)識(shí)符, 則定義后面的內(nèi)容(line2), 否則定義#else里面的內(nèi)容(line4)

line2:#defineUIKIT_EXTERN    extern "C" __attribute__((visibility ("default"))),

1.extern "C"是為了兼容以前的 C程序, 告訴編譯器按照以前C編譯方式對(duì)(全局)函數(shù)或變量進(jìn)行編譯, 否則按照c++方式進(jìn)行編譯[1]磁餐。

eg. C方式編譯函數(shù)extern void fx(int , int), 不對(duì)函數(shù)名進(jìn)行特殊處理編譯后函數(shù)名為_fx(.obj文件中)

但是C++方式編譯后, (為了支持重載)fx函數(shù)變成類似于_fx_int_int這樣的函數(shù)名, fx(int , float)會(huì)編譯成_fx_int_float (.obj文件)

2. __attribute__ 是設(shè)置函數(shù)屬性(或者變量屬性, 類型屬性), 可以設(shè)置的屬性包括

1packed,cleanup, common句惯,nocommon拍嵌,deprecated,mode潜索,section臭增,shared,tls_model竹习,transparent_union等[2]

visibility屬性是設(shè)置將本項(xiàng)目的函數(shù)作為庫使用時(shí)的可見性誊抛。g++編譯時(shí), 加入-fvisibility=hidden參數(shù), 會(huì)將所有默認(rèn)public屬性設(shè)為hidden, 導(dǎo)致庫外文件不可見

3. 但是如果設(shè)置了__attribute__((visibility ("default")))的函數(shù), 其public屬性仍能對(duì)外可見, 而不是hidden≌埃可見編譯指令-fvisibility是對(duì)所有屬性符號(hào)進(jìn)行處理, 而__attribute__((visibility ("default")))是對(duì)特定函數(shù)可見性進(jìn)行設(shè)置, 避免沖突[3]拗窃。

line3~6:忽略

line7:#define UIKIT_STATIC_INLINE?? ?static inline, 靜態(tài)內(nèi)聯(lián)

static 關(guān)鍵字修飾函數(shù)表示這是一個(gè)本地函數(shù), 不能被沒有保護(hù)該文件(對(duì)該文件具有可見性的其他文件)引用、鏈接泌辫,編譯階段就能強(qiáng)制檢查

inline 關(guān)鍵字表示建議編譯器將該函數(shù)作為一個(gè)內(nèi)聯(lián)函數(shù)随夸,將函數(shù)內(nèi)的代碼直接嵌入到每一個(gè)引用處,有點(diǎn)類似于宏定義直接替換震放,但是卻包含了編譯器嚴(yán)格的類型檢查宾毒,所以比宏定義安全,卻又有同樣的執(zhí)行速度殿遂。

總結(jié)

UIKIT_EXTERN簡單來說诈铛,就是將函數(shù)修飾為兼容以往C編譯方式的乙各、具有extern屬性(文件外可見性)、public修飾的方法或變量庫外仍可見的屬性

參考

1

2

3[1] http://www.cnblogs.com/rollenholt/archive/2012/03/20/2409046.html

[2] http://blog.csdn.net/juana1/article/details/6849120

[3] http://blog.csdn.net/mrguanlingyu/article/details/23337885

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末幢竹,一起剝皮案震驚了整個(gè)濱河市耳峦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌焕毫,老刑警劉巖蹲坷,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異邑飒,居然都是意外死亡冠句,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門幸乒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人唇牧,你說我怎么就攤上這事罕扎。” “怎么了丐重?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵腔召,是天一觀的道長。 經(jīng)常有香客問我扮惦,道長臀蛛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任崖蜜,我火速辦了婚禮浊仆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘豫领。我一直安慰自己抡柿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布等恐。 她就那樣靜靜地躺著洲劣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪课蔬。 梳的紋絲不亂的頭發(fā)上囱稽,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音二跋,去河邊找鬼战惊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛同欠,可吹牛的內(nèi)容都是我干的样傍。 我是一名探鬼主播横缔,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼衫哥!你這毒婦竟也來了茎刚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤撤逢,失蹤者是張志新(化名)和其女友劉穎膛锭,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚊荣,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡初狰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了互例。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奢入。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖媳叨,靈堂內(nèi)的尸體忽然破棺而出腥光,到底是詐尸還是另有隱情,我是刑警寧澤糊秆,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布武福,位于F島的核電站,受9級(jí)特大地震影響痘番,放射性物質(zhì)發(fā)生泄漏捉片。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一汞舱、第九天 我趴在偏房一處隱蔽的房頂上張望伍纫。 院中可真熱鬧,春花似錦兵拢、人聲如沸翻斟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽访惜。三九已至,卻和暖如春腻扇,著一層夾襖步出監(jiān)牢的瞬間债热,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工幼苛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窒篱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像墙杯,于是被迫代替她去往敵國和親配并。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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