iOS常見面試題

1.多線程梅桩、特別是NSOperation和GCD的內(nèi)部原理:

->1NSThread

優(yōu)點(diǎn):NSThread比其他兩個(gè)輕量級(jí)

缺點(diǎn):需要自己管理線程的生命周期塔鳍,線程同步伯铣。線程同步對(duì)數(shù)據(jù)的加鎖會(huì)有一定的系統(tǒng)開銷

2)Cocoa? NSOperation

優(yōu)點(diǎn):不需要關(guān)心線程管理,數(shù)據(jù)同步的事情献幔,可以把精力放在自己需要執(zhí)行的操作上懂傀。

Cocoa operation相關(guān)的類是NSOperation, NSOperationQueue.

NSOperation是個(gè)抽象類,使用它必須用它的子類,可以實(shí)現(xiàn)它或者使用它定義好的兩個(gè)子類: NSInvocationOperation和NSBlockOperation.

創(chuàng)建NSOperation子類的對(duì)象蜡感,把對(duì)象添加到NSOperationQueue隊(duì)列里執(zhí)行蹬蚁。

3) GCD(全優(yōu)點(diǎn))

Grand Central dispatch(GCD)是Apple開發(fā)的一個(gè)多核編程的解決方案。在iOS4.0開始之后才能使用郑兴。GCD是一個(gè)替代NSThread, NSOperationQueue,NSInvocationOperation等技術(shù)的很高效強(qiáng)大的技術(shù)犀斋。

————————————————————

2.運(yùn)行時(shí)機(jī)制的原理和運(yùn)用場景:

->機(jī)制:Objective-C語言是一門動(dòng)態(tài)語言,它將很多靜態(tài)語言在編譯和鏈接時(shí)期做的事放到了運(yùn)行時(shí)來處理情连;這種特性意味著Objective-C不僅需要一個(gè)編譯器叽粹,還需要一個(gè)運(yùn)行時(shí)系統(tǒng)來執(zhí)行編譯的代碼;這個(gè)運(yùn)行時(shí)系統(tǒng)即Objc Runtime却舀。Objc Runtime其實(shí)是一個(gè)Runtime庫虫几,它基本上是用C和匯編寫的,這個(gè)庫使得C語言有了面向?qū)ο蟮哪芰Α?/p>

->應(yīng)用場景:runtime發(fā)送消息挽拔;runtime交換方法(繼承系統(tǒng)的類,重寫方法);runtime動(dòng)態(tài)添加方法;runtime給分類添加屬性;runtime字典轉(zhuǎn)模型;runtime快速歸檔

————————————————

3.SDWebImage的原理,實(shí)現(xiàn)機(jī)制:

->SDWebImage內(nèi)部實(shí)現(xiàn)過程

入口setImageWithURL:placeholderImage:options:會(huì)先把placeholderImage顯示辆脸,然后SDWebImageManager根據(jù)URL開始處理圖片。

進(jìn)入SDWebImageManager-downloadWithURL:delegate:options:userInfo:螃诅,交給SDImageCache從緩存查找圖片是否已經(jīng)下載queryDiskCacheForKey:delegate:userInfo:.

先從內(nèi)存圖片緩存查找是否有圖片啡氢,如果內(nèi)存中已經(jīng)有圖片緩存状囱,SDImageCacheDelegate回調(diào)imageCache:didFindImage:forKey:userInfo:到SDWebImageManager。

SDWebImageManagerDelegate回調(diào)webImageManager:didFinishWithImage:到UIImageView+WebCache等前端展示圖片倘是。

如果內(nèi)存緩存中沒有亭枷,生成NSInvocationOperation添加到隊(duì)列開始從硬盤查找圖片是否已經(jīng)緩存。

根據(jù)URLKey在硬盤緩存目錄下嘗試讀取圖片文件搀崭。這一步是在NSOperation進(jìn)行的操作叨粘,所以回主線程進(jìn)行結(jié)果回調(diào)notifyDelegate:。

如果上一操作從硬盤讀取到了圖片瘤睹,將圖片添加到內(nèi)存緩存中(如果空閑內(nèi)存過小宣鄙,會(huì)先清空內(nèi)存緩存)。SDImageCacheDelegate回調(diào)imageCache:didFindImage:forKey:userInfo:默蚌。進(jìn)而回調(diào)展示圖片。

如果從硬盤緩存目錄讀取不到圖片苇羡,說明所有緩存都不存在該圖片绸吸,需要下載圖片,回調(diào)imageCache:didNotFindImageForKey:userInfo:设江。

共享或重新生成一個(gè)下載器SDWebImageDownloader開始下載圖片锦茁。

圖片下載由NSURLConnection來做,實(shí)現(xiàn)相關(guān)delegate來判斷圖片下載中叉存、下載完成和下載失敗码俩。

connection:didReceiveData:中利用ImageIO做了按圖片下載進(jìn)度加載效果。

connectionDidFinishLoading:數(shù)據(jù)下載完成后交給SDWebImageDecoder做圖片解碼處理歼捏。

圖片解碼處理在一個(gè)NSOperationQueue完成稿存,不會(huì)拖慢主線程UI。如果有需要對(duì)下載的圖片進(jìn)行二次處理瞳秽,最好也在這里完成瓣履,效率會(huì)好很多。

在主線程notifyDelegateOnMainThreadWithInfo:宣告解碼完成练俐,imageDecoder:didFinishDecodingImage:userInfo:回調(diào)給SDWebImageDownloader袖迎。

imageDownloader:didFinishWithImage:回調(diào)給SDWebImageManager告知圖片下載完成。

通知所有的downloadDelegates下載完成腺晾,回調(diào)給需要的地方展示圖片燕锥。

將圖片保存到SDImageCache中,內(nèi)存緩存和硬盤緩存同時(shí)保存悯蝉。寫文件到硬盤也在以單獨(dú)NSInvocationOperation完成归形,避免拖慢主線程。

SDImageCache在初始化的時(shí)候會(huì)注冊(cè)一些消息通知泉粉,在內(nèi)存警告或退到后臺(tái)的時(shí)候清理內(nèi)存圖片緩存连霉,應(yīng)用結(jié)束的時(shí)候清理過期圖片榴芳。

SDWI也提供了UIButton+WebCache和MKAnnotationView+WebCache,方便使用跺撼。

SDWebImagePrefetcher可以預(yù)先下載圖片窟感,方便后續(xù)使用。

———————————————————————————

4.block和代理的歉井,通知的區(qū)別柿祈。block的用法需要注意些什么:

->區(qū)別:1.NotificationCenter通知中心:“一對(duì)多”,在APP中哩至,很多控制器都需要知道一個(gè)事件躏嚎,應(yīng)該用通知;

2.delegate代理委托:

1菩貌,“一對(duì)一”卢佣,對(duì)同一個(gè)協(xié)議,一個(gè)對(duì)象只能設(shè)置一個(gè)代理delegate箭阶,所以單例對(duì)象就不能用代理虚茶;

2,代理更注重過程信息的傳輸:比如發(fā)起一個(gè)網(wǎng)絡(luò)請(qǐng)求仇参,可能想要知道此時(shí)請(qǐng)求是否已經(jīng)開始嘹叫、是否收到了數(shù)據(jù)、數(shù)據(jù)是否已經(jīng)接受完成诈乒、數(shù)據(jù)接收失敗

3.block(閉包)

block和delegate一樣罩扇,一般都是“一對(duì)一”之間通信交互,相比代理block有以下特點(diǎn)

1:寫法更簡練怕磨,不需要寫protocol喂饥、函數(shù)等等

2,block注重結(jié)果的傳輸:比如對(duì)于一個(gè)事件癌压,只想知道成功或者失敗仰泻,并不需要知道進(jìn)行了多少或者額外的一些信息

3,block需要注意防止循環(huán)引用

—————————————————————————

5.單利的寫法,在單利中創(chuàng)建數(shù)組應(yīng)該注意些什么:

->+ (instancetype)shareId

{

static ViewController *VC = nil;

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

VC = [[ViewController alloc] init];

});

return VC;

}

6.->http狀態(tài)嗎:302是請(qǐng)求重定向滩届。500以上是服務(wù)器錯(cuò)誤集侯。400以上是請(qǐng)求鏈接錯(cuò)誤或者找不到服務(wù)器。200以上是正確帜消。100以上是請(qǐng)求接受成功

——————————————————————

7.什么是TCP連接的三次握手:

->第一次握手:客戶端發(fā)送syn包(syn=j)到服務(wù)器棠枉,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn)泡挺;

第二次握手:服務(wù)器收到syn包辈讶,必須確認(rèn)客戶的SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k)娄猫,即SYN+ACK包贱除,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài)生闲;

第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1)月幌,此包發(fā)送完畢碍讯,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手扯躺。

————————————————————————

8.內(nèi)存分區(qū):

->代碼區(qū)捉兴;常量區(qū);全局區(qū)(靜態(tài)區(qū))录语;堆區(qū)(存放對(duì)象)芹壕;棧區(qū)(存放局部變量)

————————————————————————

9.KVC(key value coding)和KVO(key value observing):

->1.KVC方式可以更便捷的設(shè)置獲取對(duì)象的值(可以批處理浮禾,鍵路徑)。

2.KVO可以對(duì)對(duì)象進(jìn)行監(jiān)聽屬性的變化儿奶。

區(qū)別:KVC(鍵值編碼)行剂,即Key-Value Coding翎猛,一個(gè)非正式的Protocol遥金,使用字符串(鍵)訪問一個(gè)對(duì)象實(shí)例變量的機(jī)制可很。而不是通過調(diào)用Setter、Getter方法等顯式的存取方式去訪問弟塞。

KVO(鍵值監(jiān)聽),即Key-Value Observing拙已,它提供一種機(jī)制,當(dāng)指定的對(duì)象的屬性被修改后,對(duì)象就會(huì)接受到通知决记,前提是執(zhí)行了setter方法、或者使用了KVC賦值倍踪。

--------------------------------------------------------------------------------

10.http協(xié)議 get post的區(qū)別:

---->POST是安全的,GET是不安全的系宫。

GET請(qǐng)求地址和參數(shù)全放在請(qǐng)求頭中,POST請(qǐng)求地址和請(qǐng)求參數(shù)分離,地址放在請(qǐng)求頭中建车,參數(shù)拼接放入請(qǐng)求體扩借。

GET和POST都是和服務(wù)器提交參數(shù)/通訊的一種方式。

GET參數(shù)不能太長<1024B POST沒有限制<4G

GET不能上傳文件, POST可以上傳文件缤至。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末潮罪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子领斥,更是在濱河造成了極大的恐慌嫉到,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件月洛,死亡現(xiàn)場離奇詭異何恶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嚼黔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門细层,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惜辑,“玉大人,你說我怎么就攤上這事疫赎∈⒊牛” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵虚缎,是天一觀的道長撵彻。 經(jīng)常有香客問我,道長实牡,這世上最難降的妖魔是什么陌僵? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮创坞,結(jié)果婚禮上碗短,老公的妹妹穿的比我還像新娘。我一直安慰自己题涨,他們只是感情好偎谁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著纲堵,像睡著了一般巡雨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上席函,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天铐望,我揣著相機(jī)與錄音,去河邊找鬼茂附。 笑死正蛙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的营曼。 我是一名探鬼主播乒验,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蒂阱!你這毒婦竟也來了锻全?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤录煤,失蹤者是張志新(化名)和其女友劉穎虱痕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辐赞,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡部翘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了响委。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片新思。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窖梁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出夹囚,到底是詐尸還是另有隱情纵刘,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布荸哟,位于F島的核電站假哎,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鞍历。R本人自食惡果不足惜舵抹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望劣砍。 院中可真熱鬧惧蛹,春花似錦、人聲如沸刑枝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽装畅。三九已至靠娱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掠兄,已是汗流浹背饱岸。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留徽千,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓汤锨,卻偏偏與公主長得像双抽,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子闲礼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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

  • 設(shè)計(jì)模式是什么牍汹? 你知道哪些設(shè)計(jì)模式,并簡要敘述柬泽? 設(shè)計(jì)模式是一種編碼經(jīng)驗(yàn)慎菲,就是用比較成熟的邏輯去處理某一種類型的...
    Jt_Self閱讀 747評(píng)論 0 4
  • 1.Difference between shallow copy and deep copy? 淺復(fù)制和深復(fù)制的...
    用心在飛閱讀 992評(píng)論 0 9
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,356評(píng)論 0 35
  • 多線程、特別是NSOperation 和 GCD 的內(nèi)部原理锨并。運(yùn)行時(shí)機(jī)制的原理和運(yùn)用場景露该。SDWebImage的原...
    LZM輪回閱讀 2,007評(píng)論 0 12
  • 生活的面目,就是我們習(xí)慣的倒影第煮〗庥祝哭泣映出痛苦抑党,歡笑襯出快樂。但無論怎樣的生活撵摆,都是我們"精心考量"的結(jié)果呈現(xiàn)底靠。回憶...
    老兵火塘閱讀 110評(píng)論 0 0