iOS 面試題目大全

一、筆試常用基礎(chǔ)問(wèn)題


1.#import#include 的區(qū)別 @class

@class一般用于頭文件中需要聲明該類(lèi)的某個(gè)實(shí)例變量的時(shí)候用到,在m文件中還是需要使用 #import

2.@property的作用

@property是一個(gè)屬性訪問(wèn)聲明,支持重寫(xiě)set 和 get

3.readwritereadonlyassignretaincopynonatomic屬性的作用

(1)readwrite 是可讀可寫(xiě)特性;需要生成getter方法和setter方法時(shí)

(2)readonly 是只讀特性 ?只會(huì)生成getter方法 不會(huì)生成setter方法?;不希望屬性在類(lèi)外改變

(3)assign 是賦值特性,setter方法將傳入?yún)?shù)賦值給實(shí)例變量;僅設(shè)置變量時(shí);

(4)retain 表示持有特性,setter方法將傳入?yún)?shù)先保留,再賦值,傳入?yún)?shù)的retaincount會(huì)+1;

(5)copy 表示拷貝特性,setter方法將傳入對(duì)象復(fù)制一份;需要完全一份新的變量時(shí)。

(6)nonatomic 非原子操作,決定編譯器生成的setter getter是否是原子操作,atomic表示多線程安全,一般使用nonatomic

4.在一個(gè)對(duì)象的方法里面:self.name=“object”;和name =”object”有什么不同嗎?

self.name =”object”:會(huì)調(diào)用對(duì)象的setName()方法;

name = “object”:會(huì)直接把object賦值給當(dāng)前對(duì)象的name屬性。

5.請(qǐng)簡(jiǎn)述self.name= nil的機(jī)制,以及與[namerelease]的區(qū)別?

self.name =nil;? //使用nil參數(shù)調(diào)用setName:方法

[name release]生成的訪問(wèn)器將自動(dòng)釋放以前的name對(duì)象

6.請(qǐng)簡(jiǎn)要說(shuō)明viewDidLoadviewDidUnload何時(shí)調(diào)用

viewDidLoad在view從nib文件初始化時(shí)調(diào)用,loadView在controller的view為nil時(shí)調(diào)用。此方法在編程實(shí)現(xiàn)view時(shí)調(diào)用,view控制器默認(rèn)會(huì)注冊(cè)memory warning notification,當(dāng)view controller的任何view沒(méi)有用的時(shí)候,viewDidUnload會(huì)被調(diào)用,在這里實(shí)現(xiàn)將retain的view release,如果是retain的IBOutlet view屬性則不要在這里release,IBOutlet會(huì)負(fù)責(zé)release。

7.static的作用

(1)函數(shù)體內(nèi)static變量的作用范圍為該函數(shù)體,不同于auto變量,該變量的內(nèi)存只被分配一次,

因此其值在下次調(diào)用時(shí)仍維持上次的值;

(2)在模塊內(nèi)的static全局變量可以被模塊內(nèi)所用函數(shù)訪問(wèn),但不能被模塊外其它函數(shù)訪問(wèn);

(3)在模塊內(nèi)的static函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用,這個(gè)函數(shù)的使用范圍被限制在聲明

它的模塊內(nèi);

(4)在類(lèi)中的static成員變量屬于整個(gè)類(lèi)所擁有,對(duì)類(lèi)的所有對(duì)象只有一份拷貝;

(5)在類(lèi)中的static成員函數(shù)屬于整個(gè)類(lèi)所擁有,這個(gè)函數(shù)不接收this指針,因而只能訪問(wèn)類(lèi)的static成員變量。

8.Obj-c中有沒(méi)有私有方法?私有變量?一般采用什么方法實(shí)現(xiàn)?

objective-c –類(lèi)里面的方法只有兩種,靜態(tài)方法和實(shí)例方法.這似乎就不是完整的面向?qū)ο罅?按照OO的原則就是一個(gè)對(duì)象只暴露有用的東西.如果沒(méi)有了私有方法的話,對(duì)于一些小范圍的代碼重用就不那么順手了.在類(lèi)里面聲名一個(gè)私有方法

@interfaceController : NSObject {NSString *something; }

+(void)thisIsAStaticMethod;

-(void)thisIsAnInstanceMethod;

@end

@interfaceController (private)

-(void)thisIsAPrivateMethod;

@end

@private可以用來(lái)修飾私有變量

在Objective‐C中,所有實(shí)例變量默認(rèn)都是私有的,所有實(shí)例方法默認(rèn)都是公有的

9.自動(dòng)釋放池是什么,如何工作

當(dāng)您向一個(gè)對(duì)象發(fā)送一個(gè)autorelease消息時(shí),Cocoa就會(huì)將該對(duì)象的一個(gè)引用放入到最新的自動(dòng)釋放池。它仍然是個(gè)正當(dāng)?shù)膶?duì)象,因此自動(dòng)釋放池定義的作用域內(nèi)的其它對(duì)象可以向它發(fā)送消息。當(dāng)程序執(zhí)行到作用域結(jié)束的位置時(shí),自動(dòng)釋放池就會(huì)被釋放,池中的所有對(duì)象也就被釋放。

(1). ojc-c是通過(guò)一種”referring

counting”(引用計(jì)數(shù))的方式來(lái)管理內(nèi)存的,對(duì)象在開(kāi)始分配內(nèi)存(alloc)的時(shí)候引用計(jì)數(shù)為一,以后每當(dāng)碰到有copy,retain的時(shí)候引用計(jì)數(shù)都會(huì)加一,每當(dāng)碰到release和autorelease的時(shí)候引用計(jì)數(shù)就會(huì)減一,如果此對(duì)象的計(jì)數(shù)變?yōu)榱?,就會(huì)被系統(tǒng)銷(xiāo)毀.

(2). NSAutoreleasePool就是用來(lái)做引用計(jì)數(shù)的管理工作的,這個(gè)東西一般不用你管的.

(3). autorelease和release沒(méi)什么區(qū)別,只是引用計(jì)數(shù)減一的時(shí)機(jī)不同而已,autorelease會(huì)在對(duì)象的使用真正結(jié)束的時(shí)候才做引用計(jì)數(shù)減一.

10.ViewController的loadView, viewDidLoad,viewDidUnload分別是在什么時(shí)候調(diào)用的?在自定義ViewController的時(shí)候這幾個(gè)函數(shù)里面應(yīng)該做什么工作?

viewDidLoad在view從nib文件初始化時(shí)調(diào)用,loadView在controller的view為nil時(shí)調(diào)用。此方法在編程實(shí)現(xiàn)view時(shí)調(diào)用,view控制器默認(rèn)會(huì)注冊(cè)memory warning notification,當(dāng)view controller的任何view沒(méi)有用的時(shí)候,viewDidUnload會(huì)被調(diào)用,在這里實(shí)現(xiàn)將retain的view release,如果是retain的IBOutlet view屬性則不要在這里release,IBOutlet會(huì)負(fù)責(zé)release。

11.淺復(fù)制和深復(fù)制的區(qū)別?//淺拷貝和深拷貝

淺層復(fù)制(copy):只復(fù)制指向?qū)ο蟮闹羔槪粡?fù)制引用對(duì)象本身。//通過(guò)對(duì)象的指針來(lái)訪問(wèn)這個(gè)對(duì)象

深層復(fù)制(mutableCopy):復(fù)制引用對(duì)象本身意思就是有個(gè)A對(duì)象,復(fù)制一份后得到A_copy對(duì)象后,對(duì)于淺復(fù)制來(lái)說(shuō),A和A_copy指向的是同一個(gè)內(nèi)存資源,復(fù)制的只不過(guò)是是一個(gè)指針,對(duì)象本身資源還是只有一份,那如果我們對(duì)A_copy執(zhí)行了修改操作,那么發(fā)現(xiàn)A引用的對(duì)象同樣被修改,這其實(shí)違背了我們復(fù)制拷貝的一個(gè)思想。深復(fù)制就好理解了,內(nèi)存中存在了兩份獨(dú)立對(duì)象本身。//當(dāng)修改A時(shí),A copy不變。

12.framebounds有什么不同?

答案:frame指的是:該view在父view坐標(biāo)系統(tǒng)中的位置和大小。(參照點(diǎn)是父親的坐標(biāo)系統(tǒng))//frame:框架、結(jié)構(gòu)

bounds指的是:該view在本身坐標(biāo)系統(tǒng)中的位置和大小。(參照點(diǎn)是本身坐標(biāo)系統(tǒng))//bounds:界限

13.HTTP協(xié)議中,POST和GET的區(qū)別是什么?

(1).GET方法

GET方法提交數(shù)據(jù)不安全,數(shù)據(jù)置于請(qǐng)求行,客戶(hù)端地址欄可見(jiàn);

GET方法提交的數(shù)據(jù)大小有限

GET方法不可以設(shè)置書(shū)簽

(2).POST方法

POST方法提交數(shù)據(jù)安全,數(shù)據(jù)置于消息主體內(nèi),客戶(hù)端不可見(jiàn)

POST方法提交的數(shù)據(jù)大小沒(méi)有限制

POST方法可以設(shè)置書(shū)簽

14.關(guān)于多態(tài)性

多態(tài):不同對(duì)象以自己的方式響應(yīng)相同的消息的能力叫做多態(tài)。

15.對(duì)于單例的理解

基本能用熟悉的語(yǔ)言寫(xiě)出一個(gè)單例,以及可以運(yùn)用到的場(chǎng)景或是你編程中碰到過(guò)運(yùn)用的此種模式的框架類(lèi)等。進(jìn)一步點(diǎn),考慮下如何在多線程訪問(wèn)單例時(shí)的安全性。保證數(shù)據(jù)的唯一性,已經(jīng)全局性,其內(nèi)存是靜態(tài)空間,隨著程序的推出而釋放。

Demo:

??? static Singleton* _instance = nil;

??? + (instancetype)? shareInstance

??? {

??????? static dispatch_once_t onceToken ;

??????? dispatch_once(&onceToken, ^{

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

??????? }) ;

??????? return _instance;

??? }



16.Objectc的類(lèi)可以多重繼承么?可以實(shí)現(xiàn)多個(gè)接口么?重寫(xiě)一個(gè)類(lèi)的方式用繼承好還是分類(lèi)好?為什么?

Objective-c 只支持單繼承,如果要實(shí)現(xiàn)多繼承的話,可以通過(guò)類(lèi)別和協(xié)議的方式來(lái)實(shí)現(xiàn), cocoa 中所有的類(lèi)都是 NSObject 的子類(lèi),多繼承在這里是用 protocol 委托代理來(lái)實(shí)現(xiàn)的。

17.線程與進(jìn)程的區(qū)別和聯(lián)系?

進(jìn)程和線程都是由操作系統(tǒng)所體會(huì)的程序運(yùn)行的基本單元,系統(tǒng)利用該基本單元實(shí)現(xiàn)系統(tǒng)對(duì)應(yīng)用的并發(fā)性。進(jìn)程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式。進(jìn)程有獨(dú)立的地址空間,一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其它進(jìn)程產(chǎn)生影響,而線程只是一個(gè)進(jìn)程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量,但線程之間沒(méi)有單獨(dú)的地址空間,一個(gè)線程死掉就等于整個(gè)進(jìn)程死掉,所以多進(jìn)程的程序要比多線程的程序健壯,但在進(jìn)程切換時(shí),耗費(fèi)資源較大,效率要差一些。但對(duì)于一些要求同時(shí)進(jìn)行并且又要共享某些變量的并發(fā)操作,只能用線程,不能用進(jìn)程。

18.講述一下iosmvc開(kāi)發(fā)模式

答:m:model,數(shù)據(jù)處理;? v : view,視圖展示;?? c :controller,控制器(model與view之間的協(xié)調(diào)者)。

(1)Model和View永遠(yuǎn)不能相互通信,只能通過(guò)Controller傳遞。

(2)Controller可以直接與Model對(duì)話(讀寫(xiě)調(diào)用Model),Model通過(guò)Notification和KVO機(jī)制與Controller間接通信。

(3)Controller可以直接與View對(duì)話,通過(guò)outlet,直接操作View,outlet直接對(duì)應(yīng)到View中的控件,View通過(guò)action向Controller報(bào)告事件的發(fā)生(如用戶(hù)Touch我了)。Controller是View的直接數(shù)據(jù)源(數(shù)據(jù)很可能是Controller從Model中取得并經(jīng)過(guò)加工了)。Controller是View的代理(delegate),以同步View與Controller。

19.kvokvc

kvo 鍵值觀察? kvc 鍵值編碼

20.結(jié)構(gòu)體和類(lèi)的區(qū)別

(1)結(jié)構(gòu)沒(méi)有無(wú)參構(gòu)造函數(shù)

(2)結(jié)構(gòu)不能被繼承

(3)結(jié)構(gòu)是值類(lèi)型,而類(lèi)是引用類(lèi)型

(4)結(jié)構(gòu)在數(shù)據(jù)參數(shù)方面效率更高,簡(jiǎn)單數(shù)組的應(yīng)用中成本很低

()類(lèi)在方法運(yùn)算方面更有優(yōu)勢(shì),在抽象多級(jí)別時(shí)最佳選擇

21.常見(jiàn)的object-c的數(shù)據(jù)類(lèi)型有那些, 和C的基本數(shù)據(jù)類(lèi)型有什么區(qū)別?如:NSInteger和int

object-c的數(shù)據(jù)類(lèi)型有NSString,NSNumber,NSArray,NSMutableArray,NSData等等,這些都是class,創(chuàng)建后便是對(duì)象,而C語(yǔ)言的基本數(shù)據(jù)類(lèi)型int,只是一定字節(jié)的內(nèi)存空間,用于存放數(shù)值;NSInteger是基本數(shù)據(jù)類(lèi)型,并不是NSNumber的子類(lèi),當(dāng)然也不是NSObject的子類(lèi)。NSInteger是基本數(shù)據(jù)類(lèi)型Int或者Long的別名(NSInteger的定義typedef long NSInteger),它的區(qū)別在于,NSInteger會(huì)根據(jù)系統(tǒng)是32位還是64位來(lái)決定是本身是int還是Long。

22.簡(jiǎn)單介紹下NSURLConnection類(lèi)及 + sendSynchronousRequest:returningResponse:error:– initWithRequest:delegate:兩個(gè)方法的區(qū)別?

答案:NSURLConnection主要用于網(wǎng)絡(luò)訪問(wèn),其中+?sendSynchronousRequest:returningResponse:error:是同步訪問(wèn)數(shù)據(jù),即當(dāng)前線程會(huì)阻塞,并等待request的返回的response,而–?initWithRequest:delegate:使用的是異步加載,當(dāng)其完成網(wǎng)絡(luò)訪問(wèn)后,會(huì)通過(guò)delegate回到主線程,并其委托的對(duì)象。

二、技術(shù)面試題目


1、objective-c 是所有對(duì)象間的交互是如何實(shí)現(xiàn)的?

在對(duì)象間交互中每個(gè)對(duì)象承擔(dān)的角色不同,但總的來(lái)說(shuō)無(wú)非就是”數(shù)據(jù)的發(fā)送者”或”數(shù)據(jù)的接收者”兩種角色,我們可以通過(guò)代理去進(jìn)行通信,或者通過(guò)觀察者消息模式,blocks,appdelegagte 通過(guò):代理協(xié)議”或者”通知中心”方式的實(shí)現(xiàn)能最大限度的降低兩交互對(duì)象之間的耦合,不錯(cuò)的設(shè)計(jì);

2.GCD和NSOperation的區(qū)別

(1)、GCD是一種輕量級(jí)的方法來(lái)實(shí)現(xiàn)多線程。控制起來(lái)比較麻煩,比如取消和暫停一個(gè)線程。

(2)、NSOperation和NSOperationQueue相對(duì)于GCD效率上要低一點(diǎn),他們是面向?qū)ο蟮姆绞剑瑥腗ac OS X v10.6和iOS4開(kāi)始,NSOperation底層也是用的GCD來(lái)實(shí)現(xiàn)的。可以在多個(gè)操作中添加附屬,也可以重用操作,取消或者暫停。NSOperation和KVO是兼容,也就是說(shuō),可以在NSOperation中使用KVO,例如,你可以通過(guò)NSNotificationCenter去讓一個(gè)操作開(kāi)始執(zhí)行。

(3)、NSOperation的使用方法

【1】、繼承NSOperation類(lèi)

【2】、重寫(xiě)“main”方法

【3】、在“main”方法中創(chuàng)建一個(gè)autoreleasepool

【4】、將自己的代碼放在autoreleasepool中

注意:創(chuàng)建自動(dòng)釋放池的原因是,你不能訪問(wèn)主線程的自動(dòng)釋放池,所以需要自己創(chuàng)建一個(gè)。

(4)、NSOperation的常用方法

【1】、start:開(kāi)始方法,當(dāng)把NSOperation添加到NSOperationQueue中去后,隊(duì)列會(huì)在操作中調(diào)用start方法。

【2】、addDependency,removeDependency:添加從屬性,刪除從屬性,比如說(shuō)有線程a,b,如果操作a從屬于b,那么a會(huì)等到b結(jié)束后才開(kāi)始執(zhí)行。

【3】、setQueuePriority:設(shè)置線程的優(yōu)先級(jí)。例:[a setQueuePriority:NSOperationQueuePriorityVeryLow];一共有四個(gè)優(yōu)先級(jí):NSOperationQueuePriorityLow,NSOperationQueuePriorityNormal,NSOperationQueuePriorityHigh,NSOperationQueuePriorityVeryHigh。

當(dāng)你添加一個(gè)操作到一個(gè)隊(duì)列時(shí),在對(duì)操作調(diào)用start之前,NSOperationQueue會(huì)瀏覽所有的操作,具有較高優(yōu)先級(jí)的操作會(huì)優(yōu)先執(zhí)行,具有相同優(yōu)先級(jí)的操作會(huì)按照添加到隊(duì)列中順序執(zhí)行。

【4】、setCompletionBlock:設(shè)置回調(diào)方法,當(dāng)操作結(jié)束后,會(huì)調(diào)用設(shè)置的回調(diào)block。這個(gè)block會(huì)在主線程中執(zhí)行。

3、objective-c中是如何實(shí)現(xiàn)線程同步的?

Mutexlock(互斥鎖)、NSCondition lock (條件鎖)消息傳送

4、什么是UDP和TCP的區(qū)別是什么?

TCP 的全稱(chēng)是傳輸控制協(xié)議,這種協(xié)議可以提供面向連接的、可靠的、點(diǎn)到點(diǎn)的通信。

UDP 的全稱(chēng)是用戶(hù)數(shù)據(jù)包協(xié)議。他可以提供非連接的不可靠的點(diǎn)懂啊多點(diǎn)的通信,是osi參考模型中一種無(wú)連接的傳輸層協(xié)議,提供面向事務(wù)的簡(jiǎn)單的不可靠信息傳輸,_IETF RFC 768 是UDP 的正式規(guī)范;

選擇何種協(xié)議,看程序注重那個(gè)方面,可靠抑或快速。

5、TCP/IP建立連接的過(guò)程?

在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù),采用三次握手建立連接;

第一次握手:建立連接時(shí),客戶(hù)端發(fā)送連接請(qǐng)求到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);

第二次握手:服務(wù)器收到客戶(hù)端連接請(qǐng)求,向客戶(hù)端發(fā)送允許連接應(yīng)答,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);

第三次握手:客戶(hù)端收到服務(wù)器的允許連接應(yīng)答,向服務(wù)器發(fā)送確認(rèn),客戶(hù)端和服務(wù)器進(jìn)入通信狀態(tài),完成三次握手。

(所謂的三次握手,就是要有三次連接信息的發(fā)送、接收過(guò)程。TCP連的建立需要進(jìn)行三次連接信息的發(fā)送、接收。)

6.動(dòng)態(tài)綁定—在運(yùn)行時(shí)確定要調(diào)用的方法

動(dòng)態(tài)綁定將調(diào)用方法的確定也推遲到運(yùn)行時(shí)。在編譯時(shí),方法的調(diào)用并不和代碼綁定 在一起,只有在消實(shí)發(fā)送出來(lái)之后,才確定被調(diào)用的代碼。通過(guò)動(dòng)態(tài)類(lèi)型和動(dòng)態(tài)綁定技術(shù),您的代碼每次執(zhí)行都可以得到不同的結(jié)果。運(yùn)行時(shí)因子負(fù)責(zé)確定消息的接 收者和被調(diào)用的方法。 運(yùn)行時(shí)的消息分發(fā)機(jī)制為動(dòng)態(tài)綁定提供支持。當(dāng)您向一個(gè)動(dòng)態(tài)類(lèi)型確定了的對(duì)象發(fā)送消息時(shí),運(yùn)行環(huán)境系統(tǒng)會(huì)通過(guò)接收者的isa指針定位對(duì)象的類(lèi),并以此為起點(diǎn) 確定被調(diào)用的方法,方法和消息是動(dòng)態(tài)綁定的。而且,您不必在Objective-C 代碼中做任何工作,就可以自動(dòng)獲取動(dòng)態(tài)綁定的好處。您在每次發(fā)送消息時(shí),

特別是當(dāng)消息的接收者是動(dòng)態(tài)類(lèi)型已經(jīng)確定的對(duì)象時(shí),動(dòng)態(tài)綁定就會(huì)例行而 透明地發(fā)生。

7.tableView 滑動(dòng)卡的問(wèn)題

從緩存中或者是從本地讀取圖片給UIImage的時(shí)候耗費(fèi)的時(shí)間。需要把操作放到子線程里面。

8.子線程里面加入NSTimer 的時(shí)候需要 手動(dòng)添加NSRunloop? 否則不能循環(huán)。


9.在單例中創(chuàng)建數(shù)組應(yīng)該注意些什么。

單利里面添加 NSMutableArray 的時(shí)候,防止多個(gè)地方對(duì)它同時(shí)便利和修改的話,需要加原子屬性。并且用strong,,,并且寫(xiě)一個(gè)遍歷和修改的方法。加上鎖。? Lock? UnLock

10.SDWebImage內(nèi)部實(shí)現(xiàn)過(guò)程

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

(2)進(jìn)入 SDWebImageManager-downloadWithURL:delegate:options:userInfo:,交給

(3)SDImageCache 從緩存查找圖片是否已經(jīng)下載 queryDiskCacheForKey:delegate:userInfo:.

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

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

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

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

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

(9)如果從硬盤(pán)緩存目錄讀取不到圖片,說(shuō)明所有緩存都不存在該圖片,需要下載圖片,回調(diào) imageCache:didNotFindImageForKey:userInfo:。

(10)共享或重新生成一個(gè)下載器 SDWebImageDownloader 開(kāi)始下載圖片。

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

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

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

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

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

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

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

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

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

(20)SDWI 也提供了 UIButton+WebCache 和 MKAnnotationView+WebCache,方便使用。

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

11.socket連接和http連接的區(qū)別

http連接:http連接就是所謂的短連接,即客戶(hù)端向服務(wù)器端發(fā)送一次請(qǐng)求,服務(wù)器端響應(yīng)后連接即會(huì)斷掉;

socket連接:socket連接就是所謂的長(zhǎng)連接,理論上客戶(hù)端和服務(wù)器端一旦建立起連接將不會(huì)主動(dòng)斷掉;但是由于各種環(huán)境因素可能會(huì)是連接斷開(kāi),比如說(shuō):服務(wù)器端或客戶(hù)端主機(jī)down了,網(wǎng)絡(luò)故障,或者兩者之間長(zhǎng)時(shí)間沒(méi)有數(shù)據(jù)傳輸,網(wǎng)絡(luò)防火墻可能會(huì)斷開(kāi)該連接以釋放網(wǎng)絡(luò)資源。所以當(dāng)一個(gè)socket連接中沒(méi)有數(shù)據(jù)的傳輸,那么為了維持連接需要發(fā)送心跳消息~~具體心跳消息格式是開(kāi)發(fā)者自己定義的

12.如何用原生代碼實(shí)現(xiàn)斷點(diǎn)下載和斷點(diǎn)續(xù)傳

斷點(diǎn)續(xù)傳原理每次上傳是服務(wù)器返回進(jìn)度標(biāo)記,客戶(hù)端根據(jù)進(jìn)度獲取相對(duì)應(yīng)的data上傳;斷點(diǎn)下載:本地有兩個(gè)文件夾,一個(gè)臨時(shí)一個(gè)下載路徑,每次下載獲取數(shù)據(jù)時(shí)做一個(gè)標(biāo)記,重新下載時(shí)配置http的請(qǐng)求頭,再下載下對(duì)應(yīng)位置的數(shù)據(jù)。

13.熟悉個(gè)別數(shù)據(jù)加密處理

MD5非對(duì)稱(chēng)加密 DES、AES對(duì)稱(chēng)性加密、RSA非對(duì)稱(chēng)加密。

三、冷門(mén)面試題目


1.請(qǐng)解釋一下Handoff是什么,并簡(jiǎn)述它是如何實(shí)現(xiàn)iOS、Mac/網(wǎng)頁(yè)應(yīng)用互通的。

handoff是蘋(píng)果在iOS8推出的一種不同設(shè)備直接的溝通軟件,開(kāi)啟它之后,如果有用戶(hù)在同個(gè)網(wǎng)絡(luò)中收到某個(gè)電話,那么其iPad也會(huì)收到電話,假如現(xiàn)在你在使用iPad,那么你就不必再去尋找你的iPhone,用iPad就可以接聽(tīng)電話。

他是通過(guò)藍(lán)牙,或wift之間來(lái)作為相互溝通的。

2.iOS擴(kuò)展是指?能否列舉一些熱門(mén)或常見(jiàn)的范例?

擴(kuò)展(Extension)是iOS 8中引入的一個(gè)非常重要的新特性。擴(kuò)展讓app之間的數(shù)據(jù)交互成為可能。用戶(hù)可以在app中使用其他應(yīng)用提供的功能,而無(wú)需離開(kāi)當(dāng)前的應(yīng)用。

在iOS 8系統(tǒng)之前,每一個(gè)app在物理上都是彼此獨(dú)立的,app之間不能互訪彼此的私有數(shù)據(jù)。

而在引入擴(kuò)展之后,其他app可以與擴(kuò)展進(jìn)行數(shù)據(jù)交換。基于安全和性能的考慮,每一個(gè)擴(kuò)展運(yùn)行在一個(gè)單獨(dú)的進(jìn)程中,它擁有自己的bundle, bundle后綴名是.appex。擴(kuò)展bundle必須包含在一個(gè)普通應(yīng)用的bundle的內(nèi)部。

iOS 8系統(tǒng)有6個(gè)支持?jǐn)U展的系統(tǒng)區(qū)域,分別是Today、Share、Action、Photo Editing、Storage Provider、Custom keyboard。支持?jǐn)U展的系統(tǒng)區(qū)域也被稱(chēng)為擴(kuò)展點(diǎn)。

3.請(qǐng)解釋一下iOS應(yīng)用沙盒機(jī)制。

iOS應(yīng)用程序只能在為該改程序創(chuàng)建的文件系統(tǒng)中讀取文件,不可以去其它地方訪問(wèn),此區(qū)域被稱(chēng)為沙盒。所有的非代碼文件都要保存在此,例如圖像,圖標(biāo),聲音,映像,屬性列表,文本文件等。而且,

每個(gè)應(yīng)用程序都有自己的存儲(chǔ)空間

應(yīng)用程序不能翻過(guò)自己的圍墻去訪問(wèn)別的存儲(chǔ)空間的內(nèi)容

應(yīng)用程序請(qǐng)求的數(shù)據(jù)都要通過(guò)權(quán)限檢測(cè),假如不符合條件的話,不會(huì)被放行

4.響應(yīng)鏈(Responder Chain)是什么?它是如何發(fā)揮作用的?

響應(yīng)鏈?zhǔn)鞘裁矗憫?yīng)鏈?zhǔn)怯身憫?yīng)者(Responder object)之間的touch消息傳遞以及檢測(cè)組成,我們也可以理解為響應(yīng)鏈?zhǔn)怯身憫?yīng)者組成。

檢測(cè)到hit-test View后,此view擁有優(yōu)先處理事件的權(quán)利,如果view不能處理這個(gè)事件,事件就會(huì)沿著響應(yīng)者鏈向下傳遞,直到找到一個(gè)能處理該事件的view.

響應(yīng)鏈的起始點(diǎn)是,hit-test view(起點(diǎn))和UIApplication對(duì)象(終點(diǎn))。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,273評(píng)論 3 415
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 175,870評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,742評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,527評(píng)論 6 407
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,010評(píng)論 1 322
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,250評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,769評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,656評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,853評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,103評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,472評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,717評(píng)論 1 281
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,487評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,815評(píng)論 2 372

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

  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,186評(píng)論 30 471
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,372評(píng)論 0 35
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,611評(píng)論 25 708
  • 前兩天在一個(gè)街道馬路邊等車(chē),發(fā)現(xiàn)旁邊有個(gè)小男孩騎自行車(chē)不小心翻了,小男孩被摔倒在地,當(dāng)他倒地之后的第一反應(yīng)是他抬頭...
    后亮筆記閱讀 414評(píng)論 0 0
  • 上期我給大家介紹了我的神奇舍友豬大傻,有一位朋友評(píng)論說(shuō)很希望有同款腰窩,氮素我以親身經(jīng)歷告訴那位盆友,這是不可能滴...
    邗玉閱讀 539評(píng)論 9 3