2019-03-21

讀第三方開(kāi)源框架SDWebImage隨筆

1,extern 作用:可以訪問(wèn)外部文件的變量。

定義一個(gè)GFA.h 和 GFA.m

在GFA.m的@implement 下面定義一個(gè)int a =20;

我們可以在viewcontroller中不用導(dǎo)入GFA的頭文件下訪問(wèn) a變量

eg:extern int a; 這個(gè)時(shí)候并不是定義變量a 而是拿到變量 a 也可以修改 a = 10;

2,const 修飾距離const右邊最近的變量 英文單詞翻譯過(guò)來(lái)就是常量的意思 可以修飾右邊的基本變量和指針變量

被const修飾過(guò)的變量只能讀,不能修改

int??const??*p???//??*p只讀?;p變量

int??*?const??p??//?*p變量?;?p只讀

const??int???*?const?p?//p和*p都只讀

int??const??*?const??p???//p和*p都只讀

注: 判斷p 和p是只讀還是變量,關(guān)鍵是看const在誰(shuí)前面。如果只在p前面,那么p只讀,p還是變量;如果在p前面,那么p只讀 ,p變量。

//定義一個(gè)全局只讀變量

NSString??*?const kuserName =?@"appkey";

//static修飾后此全局變量只能本文件訪問(wèn)

static?NSString?*const?Key?=?@"hello”;

3,static? ?a: 修飾局部變量 保證局部變量永遠(yuǎn)只初始化一次,在程序的運(yùn)行過(guò)程中永遠(yuǎn)只有一份內(nèi)存, ?生命周期類(lèi)似全局變量了 作用域還是在函數(shù)范圍內(nèi)

-(void)touchesBegan:(NSSet?*)touches?withEvent:(UIEvent?*)event

{????//聲明一個(gè)局部變量x

????int x =?0;????//每次點(diǎn)擊view來(lái)到這個(gè)方法時(shí)讓i自增

? ? x ++;????//打印結(jié)果

????NSLog(@"i=%d",x);

}

b:修飾全局變量

使全局變量的作用域僅限于當(dāng)前文件內(nèi)部,即當(dāng)前文件內(nèi)部才能訪問(wèn)該全局變量。

iOS中在一個(gè)文件聲明的全局變量,工程的其他文件也是能訪問(wèn)的,但是我又不想讓其他文件訪問(wèn),這時(shí)就可以用static修飾它了,比較典型的是使用GCD一次性函數(shù)創(chuàng)建的單例,全局變量基本上都會(huì)用static修飾。

下面是一個(gè)GCD一次函數(shù)創(chuàng)建的單利

@implementation?LoginTool

//static修飾全局變量,讓外界文件無(wú)法訪問(wèn)

static?LoginTool?*_sharedManager?=?nil;

+?(LoginTool?*)sharedManager?{???

???static?dispatch_once_t?oncePredicate;???

???dispatch_once(&oncePredicate,?^{

????????_sharedManager?=?[[self?alloc]?init];

????});???

???return?_sharedManager;

}


inline

在iOS中的一些框架中,static inline是經(jīng)常出現(xiàn)的關(guān)鍵字組合.

static自不用多說(shuō),表示在當(dāng)前文件中應(yīng)用,如 static A, 在其它文件中也可以出現(xiàn)static A.不會(huì)導(dǎo)致重名的錯(cuò)誤.

inline. 內(nèi)聯(lián)函數(shù).

作用:替代宏.

當(dāng)然inline函數(shù)與宏有區(qū)別,inline可以:

解決函數(shù)調(diào)用效率的問(wèn)題:

函數(shù)之間調(diào)用,是內(nèi)存地址之間的調(diào)用,當(dāng)函數(shù)調(diào)用完畢之后還會(huì)返回原來(lái)函數(shù)執(zhí)行的地址。函數(shù)調(diào)用有時(shí)間開(kāi)銷(xiāo),內(nèi)聯(lián)函數(shù)就是為了解決這一問(wèn)題。

不用inline修飾的函數(shù), 匯編時(shí)會(huì)出現(xiàn) call 指令.調(diào)用call指令就是就需要:

(1)將下一條指令的所在地址入棧

(2)并將子程序的起始地址送入PC(于是CPU的下一條指令就會(huì)轉(zhuǎn)去執(zhí)行子程序).

為什么inline能取代宏?

優(yōu)點(diǎn)相比于函數(shù):

inline函數(shù)避免了普通函數(shù)的,在匯編時(shí)必須調(diào)用call的缺點(diǎn):取消了函數(shù)的參數(shù)壓棧,減少了調(diào)用的開(kāi)銷(xiāo),提高效率.所以執(zhí)行速度確比一般函數(shù)的執(zhí)行速度要快.

2)集成了宏的優(yōu)點(diǎn),使用時(shí)直接用代碼替換(像宏一樣);

優(yōu)點(diǎn)相比于宏:

1)避免了宏的缺點(diǎn):需要預(yù)編譯.因?yàn)閕nline內(nèi)聯(lián)函數(shù)也是函數(shù),不需要預(yù)編譯.

2)編譯器在調(diào)用一個(gè)內(nèi)聯(lián)函數(shù)時(shí),會(huì)首先檢查它的參數(shù)的類(lèi)型,保證調(diào)用正確。然后進(jìn)行一系列的相關(guān)檢查,就像對(duì)待任何一個(gè)真正的函數(shù)一樣。這樣就消除了它的隱患和局限性。

3)可以使用所在類(lèi)的保護(hù)成員及私有成員。

inline內(nèi)聯(lián)函數(shù)的說(shuō)明

1.內(nèi)聯(lián)函數(shù)只是我們向編譯器提供的申請(qǐng),編譯器不一定采取inline形式調(diào)用函數(shù).

2.內(nèi)聯(lián)函數(shù)不能承載大量的代碼.如果內(nèi)聯(lián)函數(shù)的函數(shù)體過(guò)大,編譯器會(huì)自動(dòng)放棄內(nèi)聯(lián).

3.內(nèi)聯(lián)函數(shù)內(nèi)不允許使用循環(huán)語(yǔ)句或開(kāi)關(guān)語(yǔ)句.

4.內(nèi)聯(lián)函數(shù)的定義須在調(diào)用之前.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,621評(píng)論 1 32
  • 說(shuō)明: ? 不是很清楚的點(diǎn) ,用下劃線。 ? 解答,用斜體; ? 重點(diǎn),用粗體加粗; 第四章 Fun...
    CodeYuan閱讀 592評(píng)論 0 2
  • 幾種語(yǔ)言的特性 匯編程序:將匯編語(yǔ)言源程序翻譯成目標(biāo)程序編譯程序:將高級(jí)語(yǔ)言源程序翻譯成目標(biāo)程序解釋程序:將高級(jí)語(yǔ)...
    囊螢映雪的螢閱讀 3,056評(píng)論 1 5
  • 1、設(shè)計(jì)模式是什么? 你知道哪些設(shè)計(jì)模式,并簡(jiǎn)要敘述? 設(shè)計(jì)模式是一種編碼經(jīng)驗(yàn),就是用比較成熟的邏輯去處理某一種類(lèi)...
    方白羽lw閱讀 870評(píng)論 0 0
  • 在這個(gè)紛擾的世界, 有一個(gè)知心的朋友是一件欣然的事情約朋友到咖啡店喝幾杯咖啡說(shuō)一說(shuō)彼此之間的最近的趣事 。 ...
    茉合閱讀 550評(píng)論 3 1

友情鏈接更多精彩內(nèi)容