iOS 面試題及答案

面試題集錦

iOS面試題及答案1
iOS面試題及答案2
iOS進(jìn)階面試題及答案3

一. CoreAnimation 相關(guān)

CABasicAnimation 資料
CoreAnimation(核心動(dòng)畫(huà))概述

iOS面試題及答案2.5
NStimer準(zhǔn)嗎诺擅?談?wù)勀愕目捶ㄊ炷郏咳绻粶?zhǔn)該怎樣實(shí)現(xiàn)一個(gè)精確的NSTimer?

動(dòng)畫(huà)定時(shí)器——CADisplayLink

CoreGraphics(核心圖形)

它是iOS的核心圖形庫(kù),包含Quartz2D繪圖API接口,常用的是point算柳,size旅掂,rect等這些圖形搁骑,都定義在這個(gè)框架中,類(lèi)名以CG開(kāi)頭的都屬于CoreGraphics框架屋讶,它提供的都是C語(yǔ)言函數(shù)接口泻蚊,是可以在iOS和mac OS 通用的

QuartzCore

Quartz是位于Mac OS X的Drawin核心之上的繪圖層,這個(gè)框架感覺(jué)不是很清晰丑婿,但是看頭文件可以發(fā)現(xiàn)性雄,它就是CoreAnimation,這個(gè)框架頭文件只包含了

二. 第三方庫(kù)

SDWebImage

Github詳細(xì)資料
緩存策略

AFNetworking/ Alamorefire

Github詳細(xì)資料

三. 設(shè)計(jì)模式

1. MVC
2. MVVM
3. 單例

OC:

@implementation Singleton
    +(Singleton *)shared{
        static Singleton* instance = nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            instance = [Singleton new];
        });
        return instance;
    }

+(id) allocWithZone:(struct _NSZone *)zone
{
    return [Singleton shareInstance] ;
}

-(id) copyWithZone:(NSZone *)zone
{
    return [Singleton shareInstance] ;
}

-(id) mutablecopyWithZone:(NSZone *)zone
{
    return [Singleton shareInstance] ;
}

Swift:

Class Singleton {
    static let shared = Singleton()
    private init() { }
}
4. 代理
5. 工廠模式

四. 消息傳遞

KVO

KVO(key-Value-Observing):鍵值觀察機(jī)制 他提供了觀察某一屬性變化的方法羹奉,極大的簡(jiǎn)化了代碼秒旋。基于runtime機(jī)制實(shí)現(xiàn)诀拭。
KVO只能被KVC觸發(fā)迁筛,包括使用setValue:forKey:方法和點(diǎn)語(yǔ)法。

// 通過(guò)下方方法為屬性添加KVO觀察
- (void)addObserver:(NSObject *)observer
                  forKeyPath:(NSString *)keyPath
                  options:(NSKeyValueObservingOptions)options
                  context:(nullable void *)context;
// 當(dāng)被觀察的屬性發(fā)送變化時(shí)耕挨,會(huì)自動(dòng)觸發(fā)下方方法                   
- (void)observeValueForKeyPath:(NSString *)keyPath
                           ofObject:(id)object
                               change:(NSDictionary *)change
                              context:(void *)context{}

KVC 和 KVO 的 keyPath 可以是屬性细卧、實(shí)例變量、成員變量筒占。

KVC

KVC(Key-Value-Coding):鍵值編碼 是一種通過(guò)字符串間接訪(fǎng)問(wèn)對(duì)象的方式(即給屬性賦值)
舉例說(shuō)明:

stu.name = @"張三" // 點(diǎn)語(yǔ)法給屬性賦值
[stu setValue:@"張三" forKey:@"name"]; // 通過(guò)字符串使用KVC方式給屬性賦值
stu1.nameLabel.text = @"張三";
[stu1 setValue:@"張三" forKey:@"nameLabel.text"]; // 跨層賦值

當(dāng)一個(gè)對(duì)象調(diào)用setValue方法時(shí)贪庙,方法內(nèi)部會(huì)做以下操作:
1). 檢查是否存在相應(yīng)的key的set方法,如果存在翰苫,就調(diào)用set方法止邮。
2). 如果set方法不存在,就會(huì)查找與key相同名稱(chēng)并且?guī)聞澗€(xiàn)的成員變量奏窑,如果有导披,則直接給成員變量屬性賦值。
3). 如果沒(méi)有找到_key埃唯,就會(huì)查找相同名稱(chēng)的屬性key撩匕,如果有就直接賦值。
4). 如果還沒(méi)有找到墨叛,則調(diào)用valueForUndefinedKey:和setValue:forUndefinedKey:方法止毕。
這些方法的默認(rèn)實(shí)現(xiàn)都是拋出異常模蜡,我們可以根據(jù)需要重寫(xiě)它們。

通知

五. HTTP協(xié)議相關(guān)

詳細(xì)基礎(chǔ)資料

三次握手

四次握手

六. WKWebView相關(guān)

1. 緩存
2. Cookie

七. 其它

1. ViewController生命周期
1. initWithCoder:通過(guò)nib文件初始化時(shí)觸發(fā)哩牍。
2. awakeFromNib:nib文件被加載的時(shí)候,會(huì)發(fā)生一個(gè)awakeFromNib的消息到nib文件中的每個(gè)對(duì)象令漂。      
3. loadView:開(kāi)始加載視圖控制器自帶的view膝昆。
4. viewDidLoad:視圖控制器的view被加載完成。  
5. viewWillAppear:視圖控制器的view將要顯示在window上叠必。
6. updateViewConstraints:視圖控制器的view開(kāi)始更新AutoLayout約束荚孵。
7. viewWillLayoutSubviews:視圖控制器的view將要更新內(nèi)容視圖的位置。
8. viewDidLayoutSubviews:視圖控制器的view已經(jīng)更新視圖的位置纬朝。
9. viewDidAppear:視圖控制器的view已經(jīng)展示到window上收叶。 
10. viewWillDisappear:視圖控制器的view將要從window上消失。
11. viewDidDisappear:視圖控制器的view已經(jīng)從window上消失共苛。
2. 閉包的聲明

屬性聲明

void(^propertyName)(void);

函數(shù)聲明

- (void)function: callback: (ReturnTypeName(^)(TypeName *))handler;
3. Swift OC 混編
  1. OC引用Swift常見(jiàn)問(wèn)題
    @objc
4. 持續(xù)化存儲(chǔ)
  1. NSUserDefaults (偏好設(shè)置Preference) Preferences
    NSUserDefaults適合存儲(chǔ)輕量級(jí)的本地?cái)?shù)據(jù)判没,支持的數(shù)據(jù)類(lèi)型有:NSNumbe (NSInteger、float隅茎、double)澄峰,NSString,NSDate辟犀,NSArray俏竞,NSDictionary,BOOL堂竟,NSData
    NSUserDefault 本地保存的位置是Library/Preferences 這個(gè)目錄下的 plist 文件魂毁。
    使用偏好設(shè)置對(duì)數(shù)據(jù)進(jìn)行保存之后, 它保存到系統(tǒng)的時(shí)間是不確定的,會(huì)在將來(lái)某一時(shí)間點(diǎn)自動(dòng)將數(shù)據(jù)保存到Preferences文件夾下面出嘹,如果需要即刻將數(shù)據(jù)存儲(chǔ)席楚,可以使用[defaults synchronize]; 不可用自定義 因?yàn)槭莗list

  2. Keychain(鑰匙串)
    在Capabilities 中打開(kāi)Keychain
    引入Security 庫(kù)
    OSStatus SecItem 類(lèi)增刪改查

  3. 文件沙盒 Documents等
    主要存儲(chǔ)非機(jī)密數(shù)據(jù),大的數(shù)據(jù)疚漆,如圖片酣胀。

存文件的操作步驟如下:
(1). 獲得文件即將保存的路徑
方法一:

NSArray *documentPaths = 
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  
NSUserDomainMask,YES);
NSString *ourDocumentPath =[documentPaths objectAtIndex:0];

方法二:

NSString *sandboxPath = NSHomeDirectory();
NSString *documentPath = [sandboxPath
stringByAppendingPathComponent:@"Documents"];

(2). 生成在該路徑下的文件

NSString *FileName=[documentDirectory stringByAppendingPathComponent:fileName];//fileName就是保存文件的文件名 

(3). 往文件中寫(xiě)入數(shù)據(jù)

[data writeToFile:FileName atomically:YES];//將NSData類(lèi)型對(duì)象data寫(xiě)入文件,文件名為FileName

從沙盒中取出文件:
取就比較簡(jiǎn)單娶聘,只需下面一行代碼!

NSData data=[NSData dataWithContentsOfFile:FileName options:0 error:NULL];
  1. plist存儲(chǔ) Documents
    即屬性列表文件甚脉,全名是Property List丸升,這種文件的擴(kuò)展名為.plist,因此牺氨,通常被叫做plist文件狡耻。它是一種用來(lái)存儲(chǔ)串行化后的對(duì)象的文件墩剖,用于存儲(chǔ)程序中經(jīng)常用到且數(shù)據(jù)量小而不經(jīng)常改動(dòng)的數(shù)據(jù)。
    可以存儲(chǔ)的類(lèi)型:NSNumber夷狰,NSString岭皂,NSDate,NSData ,NSArray沼头,NSDictionary爷绘,BOOL.
    不支持自定義對(duì)象的存儲(chǔ).

NSArray *sandBoxPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [sandBoxPath objectAtIndex:0];
NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"myTestPlist.plist"];
NSLog(@"%@",plistPath);

  1. 歸檔 (NSKeyedArchiver) Cache
    歸檔在iOS中是另一種形式的序列化,只要遵循了NSCoding協(xié)議的對(duì)象都可以通過(guò)它實(shí)現(xiàn)序列化进倍。由于決大多數(shù)支持存儲(chǔ)數(shù)據(jù)的Foundation和Cocoa Touch類(lèi)都遵循了NSCoding協(xié)議土至,因此,對(duì)于大多數(shù)類(lèi)來(lái)說(shuō)猾昆,歸檔相對(duì)而言還是比較容易實(shí)現(xiàn)的陶因。
    對(duì)象歸檔后將得到一個(gè)后綴為.archive的文件,數(shù)據(jù)就保存在了這個(gè)文件中。
  1. 數(shù)據(jù)庫(kù)
    SQLite (CoreData FMDB)
    Realm
路徑 保存數(shù)據(jù)特點(diǎn) iTunes是否同步
Document 適合存儲(chǔ)重要的數(shù)據(jù) 同步
Library/Caches 體積大垂蜗,不需要備份 不同步
Library/Preferences 應(yīng)用的設(shè)置信息 同步
tmp 臨時(shí)文件 不同步

簡(jiǎn)介
優(yōu)缺點(diǎn)及選擇
文件目錄簡(jiǎn)介

5. UITableView初始化過(guò)程
1:詢(xún)問(wèn)分區(qū)個(gè)數(shù) numberOfSection
2:詢(xún)問(wèn)每個(gè)分區(qū)的頁(yè)眉和頁(yè)腳的預(yù)估高度 estimatedSectionHeaderHeight/estimatedSectionFooterHeight
3:詢(xún)問(wèn)每個(gè)分區(qū)cell的個(gè)數(shù) numberOfRows
4:詢(xún)問(wèn)每個(gè)分區(qū)cell的預(yù)估高度 estimatedRowHeight
5:詢(xún)問(wèn)每個(gè)分區(qū)cell的真實(shí)高度 rowHeight
6:詢(xún)問(wèn)每個(gè)分區(qū)cell的邊距楷扬、樣式、編輯狀態(tài)
7:詢(xún)問(wèn)每個(gè)分區(qū)頁(yè)腳的真實(shí)高度 heightForFooter
8:詢(xún)問(wèn)每個(gè)分區(qū)的cell(自定義cell)cellForRow
9:調(diào)用cell即將顯示的方法 cellWillDisplay

10:詢(xún)問(wèn)每個(gè)分區(qū)頁(yè)眉的真實(shí)高度 heightForHeader
11:詢(xún)問(wèn)每個(gè)分區(qū)頁(yè)眉(自定義UIView)viewForSectionHeader
12:調(diào)用每個(gè)分區(qū)頁(yè)眉即將出現(xiàn)的方法 sectionHeaderWillDisplay
13:詢(xún)問(wèn)每個(gè)分區(qū)頁(yè)腳(自定義UIView)viewForSectionFooter
14:調(diào)用每個(gè)分區(qū)頁(yè)腳即將出現(xiàn)的方法 sectionFooterWillDisplay

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贴见,一起剝皮案震驚了整個(gè)濱河市烘苹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蝇刀,老刑警劉巖螟加,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異吞琐,居然都是意外死亡捆探,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)站粟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)黍图,“玉大人,你說(shuō)我怎么就攤上這事奴烙≈唬” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵切诀,是天一觀的道長(zhǎng)揩环。 經(jīng)常有香客問(wèn)我,道長(zhǎng)幅虑,這世上最難降的妖魔是什么丰滑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮倒庵,結(jié)果婚禮上褒墨,老公的妹妹穿的比我還像新娘炫刷。我一直安慰自己,他們只是感情好郁妈,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布浑玛。 她就那樣靜靜地躺著,像睡著了一般噩咪。 火紅的嫁衣襯著肌膚如雪顾彰。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天剧腻,我揣著相機(jī)與錄音拘央,去河邊找鬼。 笑死书在,一個(gè)胖子當(dāng)著我的面吹牛灰伟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播儒旬,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼栏账,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了栈源?” 一聲冷哼從身側(cè)響起挡爵,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甚垦,沒(méi)想到半個(gè)月后茶鹃,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡艰亮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年闭翩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迄埃。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疗韵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出侄非,到底是詐尸還是另有隱情蕉汪,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布逞怨,位于F島的核電站者疤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏叠赦。R本人自食惡果不足惜宛渐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望眯搭。 院中可真熱鬧窥翩,春花似錦、人聲如沸鳞仙。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)棍好。三九已至仗岸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間借笙,已是汗流浹背扒怖。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留业稼,地道東北人盗痒。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像低散,于是被迫代替她去往敵國(guó)和親俯邓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353