近期公司業(yè)務(wù)擴大碘耳,小組又增加了兩個崗位名額抱既,整理出一點基礎(chǔ)且實用的面試題剪返,更高效的在面試中篩查合適的人選。
http://www.reibang.com/p/d884f3040fda
http://www.reibang.com/p/a70841d17fb2
runtime相關(guān)
http://www.reibang.com/p/3ec2f56f3679
初級:
1倚搬、描述一種在Swift中出現(xiàn)循環(huán)引用的情況冶共,并說明怎么解決。
循環(huán)引用出現(xiàn)在當兩個實例對象相互擁有強引用關(guān)系的時候每界,這會造成內(nèi)存泄露捅僵,原因是這兩個對象都不會被釋放。只要一個對象被另一個對象強引用眨层,
那么該對象就不能被釋放庙楚,由于強引用的存在,每個對象都會保持對方的存在谐岁。
解決方式:用weak或者unowned引用代替其中一個的強引用,來打破循環(huán)引用榛臼。
2伊佃、代碼設(shè)計模式、架構(gòu)模式沛善、框架
單例 航揉,
工廠,
觀察者模式 :通知金刁、KVO
架構(gòu)模式
MVC MVVM MVP
3帅涂、frame 和 bounds 有什么不同?
frame指的是:該view在父view坐標系統(tǒng)中的位置和大小尤蛮。(參照點是父view的坐標系統(tǒng))
bounds指的是:該view在本身坐標系統(tǒng)中的位置和大小媳友。(參照點是屏幕坐標系統(tǒng))
4、Category(類別)产捞、 Extension(擴展)和繼承的區(qū)別
區(qū)別:
1. 分類有名字醇锚,類擴展沒有分類名字,是一種特殊的分類坯临。
2. 分類只能擴展方法(屬性僅僅是聲明焊唬,并沒真正實現(xiàn)),類擴展可以擴展屬性看靠、成員變量和方法赶促。
3. 繼承可以增加,修改或者刪除方法挟炬,并且可以增加屬性鸥滨。
5嗦哆、ViewController生命周期
按照執(zhí)行順序排列:
1. initWithCoder:通過nib文件初始化時觸發(fā)。
2. awakeFromNib:nib文件被加載的時候爵赵,會發(fā)生一個awakeFromNib的消息到nib文件中的每個對象吝秕。
3. loadView:開始加載視圖控制器自帶的view。
4. viewDidLoad:視圖控制器的view被加載完成空幻。
5. viewWillAppear:視圖控制器的view將要顯示在window上烁峭。
6. updateViewConstraints:視圖控制器的view開始更新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上消失鬓梅。
6、你一般是怎么用Instruments的谨湘?
Instruments里面工具很多绽快,常用:
product -> profile ->
1). Time Profiler: 性能分析
2). Zombies:檢查是否訪問了僵尸對象,但是這個工具只能從上往下檢查紧阔,不智能坊罢。
3). Allocations:用來檢查內(nèi)存,寫算法的那批人也用這個來檢查擅耽。
4). Leaks:檢查內(nèi)存活孩,看是否有內(nèi)存泄露。
7乖仇、在Swift中憾儒,什么時候用結(jié)構(gòu)體,什么時候用類乃沙?
在Swift中起趾,類和結(jié)構(gòu)體有許多不同的特性。下面是兩者不同的總結(jié):
類支持繼承警儒,結(jié)構(gòu)體不支持阳掐。
類是引用類型,結(jié)構(gòu)體是值類型
并沒有通用的規(guī)則決定結(jié)構(gòu)體和類哪一個更好用冷蚂。一般的建議是使用最小的工具來完成你的目標缭保,但是有一個好的經(jīng)驗是多使用結(jié)構(gòu)體,除非你用了繼承和引用語義蝙茶。
注意:在運行時艺骂,結(jié)構(gòu)體在性能方面更優(yōu)于類,原因是結(jié)構(gòu)體的方法調(diào)用是靜態(tài)綁定隆夯,而類的方法調(diào)用是動態(tài)實現(xiàn)的钳恕。這就是盡可能得使用結(jié)構(gòu)體代替類的又一個好的原因别伏。
8、在swift中忧额?的含義是什么
guard 使用場景
引發(fā) swift 可選類型
http://www.reibang.com/p/448cf4f8cf65
9厘肮、Swift 高階函數(shù)
map、filter睦番、reduce 的作用
map 用于映射, 可以將一個列表轉(zhuǎn)換為另一個列表
filter 用于過濾, 可以篩選出想要的元素
reduce 合并
map 與 flatmap 的區(qū)別
swift4新特性 compactMap 替代了 flatmap
10类茂、什么時候使用 @objc
@objc 用途是為了在 Objective-C 和 Swift 混編的時候, 能夠正常調(diào)用 Swift 代碼. 可以用于修飾類, 協(xié)議, 方法, 屬性.
常用的地方是在定義 delegate 協(xié)議中, 會將協(xié)議中的部分方法聲明為可選方法, 需要用到@objc
自己想到的,在實際開發(fā)業(yè)務(wù)時可能用到的一些面試題:
回傳值一般喜歡用 閉包還是代理 通知
頁面網(wǎng)絡(luò)加載的時候跳轉(zhuǎn)到其他界面怎么處理
友盟出現(xiàn)錯誤日志托嚣,但是沒有具體到頁面巩检,怎么處理
設(shè)計封裝組件化功能模塊在完成功能的同時,優(yōu)先考慮什么方向優(yōu)化
如何優(yōu)化代碼
頁面有多個scrollView時示启,如何手勢不沖突