在簡書上看到的一些面試題然后自己收集的一些答案
1.什么是響應(yīng)鏈,它是怎么工作的?
響應(yīng)者鏈?zhǔn)怯梢粋€一個響應(yīng)者組成的長鏈;響應(yīng)者鏈定義了iOS中觸摸事件的交互規(guī)則;如果hit-test檢測出的view沒有響應(yīng)事件,事件就會沿著響應(yīng)者鏈往下傳遞;如果鏈中某個響應(yīng)者響應(yīng)了事件或者已經(jīng)沒有響應(yīng)者了,傳遞就會結(jié)束。
舉個例子在一個視圖控制器上創(chuàng)建一個view 如果當(dāng)view的hidden設(shè)置為Yes或者其alpha值為0那么他是無法被觸摸事件響應(yīng)的。如果以上設(shè)置正確userInteractionEnable此屬性如果設(shè)置為No同樣不會被響應(yīng)。當(dāng)以上所有都設(shè)置正確想要一個view接受響應(yīng)事件我們還需要通過UIThouCh? 及 UIEvent 來添加觸摸事件實現(xiàn)響應(yīng)鏈的完成
2.如何訪問并修改一個類的私有屬性
可以通過runtime來訪問及修改其私有屬性(在之前runtime的文章中有提到)另外要修改其私有屬性可以通過setValue forkey的方法進(jìn)行修改
3.iOSExtension是什么?
說到extension都會和category來進(jìn)行比較。extension被開發(fā)者稱之為擴展、延展、匿名分類。extension看起來很像一個匿名的category,但是extension和category幾乎完全是兩個東西。和category不同的是extension不但可以聲明方法,還可以聲明屬性、成員變量。extension一般用于聲明私有方法,私有屬性,私有成員變量。
順帶說下它們之間的區(qū)別:
extension在編譯期決議,它就是類的一部分,但是category則完全不一樣,它是在運行期決議的。extension在編譯期和頭文件里的@interface以及實現(xiàn)文件里的@implement一起形成一個完整的類,它、extension伴隨類的產(chǎn)生而產(chǎn)生,亦隨之一起消亡。
extension一般用來隱藏類的私有信息,你必須有一個類的源碼才能為一個類添加extension,所以你無法為系統(tǒng)的類比如NSString添加extension,除非創(chuàng)建子類再添加extension。而category不需要有類的源碼,我們可以給系統(tǒng)提供的類添加category。
extension可以添加實例變量,而category不可以。
extension和category都可以添加屬性,但是category的屬性不能生成成員變量和getter、setter方法的實現(xiàn)。
就category和extension的區(qū)別來看,我們可以推導(dǎo)出一個明顯的事實,extension可以添加實例變量,而category是無法添加實例變量的(因為在運行期,對象的內(nèi)存布局已經(jīng)確定,如果添加實例變量就會破壞類的內(nèi)部布局,這對編譯型語言來說是災(zāi)難性的)。
4.如何把一個包含自定義對象的數(shù)組序列化到磁盤
用NSKeyedArchiver對數(shù)組進(jìn)行歸檔必須實現(xiàn)NSCoding協(xié)議
5.Apple Pay 是什么?它的大概工作流程是怎樣的?
蘋果6及以上機型,里面有個NFC通訊模塊,蘋果公司推出Apple Pay,讓手機用戶通過綁定銀行的信用卡或借記卡,產(chǎn)生一個虛擬卡對應(yīng)實體卡,線上線下消費時,不用再用實體卡,而是反映為虛擬卡消費支付,按指紋(輸入密碼、簽名)完成支付,避免實體卡泄露卡號、密碼(或被盜取信息)的風(fēng)險,當(dāng)然虛擬卡消費的數(shù)據(jù)最終反映在實體卡上.
6.iOS 的沙盒目錄結(jié)構(gòu)是怎樣的? App Bundle 里面都有什么?
默認(rèn)情況下,每個沙盒含有1個應(yīng)用程序包MyApp.app和3個文件夾:Documents, Library 和 tmp。因為應(yīng)用的沙盒機制,應(yīng)用只能在幾個目錄下讀寫文件。
MyApp.app:應(yīng)用程序包,這里面存放的是應(yīng)用程序的源文件,包括資源文件和可執(zhí)行文件。
訪問方式:
NSString *budlePath = [[NSBundle mainBundle] bundlePath];
Documents: 蘋果建議將程序中建立的或在程序中瀏覽到的文件數(shù)據(jù)保存在該目錄下
訪問方式:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
Library:存儲程序的默認(rèn)設(shè)置或其它狀態(tài)信息
訪問方式:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libraryDirectory = [paths objectAtIndex:0];
Library/Caches:存放緩存文件,iTunes不會備份此目錄,此目錄下文件不會在應(yīng)用退出刪除
訪問方式:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString* cachesDirectory = [paths objectAtIndex:0];
tmp:提供一個即時創(chuàng)建臨時文件的地方。
訪問方式:
NSString *tempPath = NSTemporaryDirectory();
iTunes在與iPhone同步時,備份所有的Documents和Library文件(Library/Caches除外)。
iPhone在重啟時,會丟棄所有的tmp文件。