在簡書上看到的一些面試題然后自己收集的一些答案
1.什么是響應(yīng)鏈馒铃,它是怎么工作的开伏?
響應(yīng)者鏈?zhǔn)怯梢粋€(gè)一個(gè)響應(yīng)者組成的長鏈坏挠;響應(yīng)者鏈定義了iOS中觸摸事件的交互規(guī)則;如果hit-test檢測出的view沒有響應(yīng)事件奠涌,事件就會(huì)沿著響應(yīng)者鏈往下傳遞蚕涤;如果鏈中某個(gè)響應(yīng)者響應(yīng)了事件或者已經(jīng)沒有響應(yīng)者了,傳遞就會(huì)結(jié)束铣猩。
舉個(gè)例子在一個(gè)視圖控制器上創(chuàng)建一個(gè)view 如果當(dāng)view的hidden設(shè)置為Yes或者其alpha值為0那么他是無法被觸摸事件響應(yīng)的揖铜。如果以上設(shè)置正確userInteractionEnable此屬性如果設(shè)置為No同樣不會(huì)被響應(yīng)。當(dāng)以上所有都設(shè)置正確想要一個(gè)view接受響應(yīng)事件我們還需要通過UIThouCh? 及 UIEvent 來添加觸摸事件實(shí)現(xiàn)響應(yīng)鏈的完成
2.如何訪問并修改一個(gè)類的私有屬性
可以通過runtime來訪問及修改其私有屬性(在之前runtime的文章中有提到)另外要修改其私有屬性可以通過setValue forkey的方法進(jìn)行修改
3.iOSExtension是什么达皿?
說到extension都會(huì)和category來進(jìn)行比較天吓。extension被開發(fā)者稱之為擴(kuò)展、延展峦椰、匿名分類龄寞。extension看起來很像一個(gè)匿名的category,但是extension和category幾乎完全是兩個(gè)東西汤功。和category不同的是extension不但可以聲明方法物邑,還可以聲明屬性、成員變量。extension一般用于聲明私有方法色解,私有屬性茂嗓,私有成員變量。
順帶說下它們之間的區(qū)別:
extension在編譯期決議科阎,它就是類的一部分述吸,但是category則完全不一樣,它是在運(yùn)行期決議的锣笨。extension在編譯期和頭文件里的@interface以及實(shí)現(xiàn)文件里的@implement一起形成一個(gè)完整的類蝌矛,它、extension伴隨類的產(chǎn)生而產(chǎn)生错英,亦隨之一起消亡入撒。
extension一般用來隱藏類的私有信息,你必須有一個(gè)類的源碼才能為一個(gè)類添加extension椭岩,所以你無法為系統(tǒng)的類比如NSString添加extension茅逮,除非創(chuàng)建子類再添加extension。而category不需要有類的源碼簿煌,我們可以給系統(tǒng)提供的類添加category。
extension可以添加實(shí)例變量鉴吹,而category不可以姨伟。
extension和category都可以添加屬性,但是category的屬性不能生成成員變量和getter豆励、setter方法的實(shí)現(xiàn)夺荒。
就category和extension的區(qū)別來看,我們可以推導(dǎo)出一個(gè)明顯的事實(shí)良蒸,extension可以添加實(shí)例變量技扼,而category是無法添加實(shí)例變量的(因?yàn)樵谶\(yùn)行期,對象的內(nèi)存布局已經(jīng)確定嫩痰,如果添加實(shí)例變量就會(huì)破壞類的內(nèi)部布局剿吻,這對編譯型語言來說是災(zāi)難性的)。
4.如何把一個(gè)包含自定義對象的數(shù)組序列化到磁盤
用NSKeyedArchiver對數(shù)組進(jìn)行歸檔必須實(shí)現(xiàn)NSCoding協(xié)議
5.Apple Pay 是什么串纺?它的大概工作流程是怎樣的丽旅?
蘋果6及以上機(jī)型,里面有個(gè)NFC通訊模塊纺棺,蘋果公司推出Apple Pay,讓手機(jī)用戶通過綁定銀行的信用卡或借記卡榄笙,產(chǎn)生一個(gè)虛擬卡對應(yīng)實(shí)體卡,線上線下消費(fèi)時(shí)祷蝌,不用再用實(shí)體卡茅撞,而是反映為虛擬卡消費(fèi)支付,按指紋(輸入密碼、簽名)完成支付米丘,避免實(shí)體卡泄露卡號(hào)剑令、密碼(或被盜取信息)的風(fēng)險(xiǎn),當(dāng)然虛擬卡消費(fèi)的數(shù)據(jù)最終反映在實(shí)體卡上.
6.iOS 的沙盒目錄結(jié)構(gòu)是怎樣的蠕蚜? App Bundle 里面都有什么尚洽?
默認(rèn)情況下,每個(gè)沙盒含有1個(gè)應(yīng)用程序包MyApp.app和3個(gè)文件夾:Documents, Library 和 tmp靶累。因?yàn)閼?yīng)用的沙盒機(jī)制腺毫,應(yīng)用只能在幾個(gè)目錄下讀寫文件。
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:存儲(chǔ)程序的默認(rèn)設(shè)置或其它狀態(tài)信息
訪問方式:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libraryDirectory = [paths objectAtIndex:0];
Library/Caches:存放緩存文件邪蛔,iTunes不會(huì)備份此目錄急黎,此目錄下文件不會(huì)在應(yīng)用退出刪除
訪問方式:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString* cachesDirectory = [paths objectAtIndex:0];
tmp:提供一個(gè)即時(shí)創(chuàng)建臨時(shí)文件的地方。
訪問方式:
NSString *tempPath = NSTemporaryDirectory();
iTunes在與iPhone同步時(shí)侧到,備份所有的Documents和Library文件(Library/Caches除外)勃教。
iPhone在重啟時(shí),會(huì)丟棄所有的tmp文件匠抗。