iOS面試題

近期公司業(yè)務擴大,小組又增加了兩個崗位名額,整理出一點基礎且實用的面試題,更高效的在面試中篩查合適的人選。

http://www.itdecent.cn/p/d884f3040fda
http://www.itdecent.cn/p/a70841d17fb2

runtime相關
http://www.itdecent.cn/p/3ec2f56f3679

初級:

1、描述一種在Swift中出現循環(huán)引用的情況,并說明怎么解決。

    循環(huán)引用出現在當兩個實例對象相互擁有強引用關系的時候,這會造成內存泄露,原因是這兩個對象都不會被釋放。只要一個對象被另一個對象強引用,
    那么該對象就不能被釋放,由于強引用的存在,每個對象都會保持對方的存在。
    解決方式:用weak或者unowned引用代替其中一個的強引用,來打破循環(huán)引用。

2、代碼設計模式、架構模式、框架

單例 ,

工廠,

觀察者模式 :通知、KVO 


架構模式

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. 分類只能擴展方法(屬性僅僅是聲明,并沒真正實現),類擴展可以擴展屬性、成員變量和方法。
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將要更新內容視圖的位置。
8. viewDidLayoutSubviews:視圖控制器的view已經更新視圖的位置。
9. viewDidAppear:視圖控制器的view已經展示到window上。 
10. viewWillDisappear:視圖控制器的view將要從window上消失。
11. viewDidDisappear:視圖控制器的view已經從window上消失。

6、你一般是怎么用Instruments的?

Instruments里面工具很多,常用:
product -> profile ->
1). Time Profiler: 性能分析
2). Zombies:檢查是否訪問了僵尸對象,但是這個工具只能從上往下檢查,不智能。
3). Allocations:用來檢查內存,寫算法的那批人也用這個來檢查。
4). Leaks:檢查內存,看是否有內存泄露。

7、在Swift中,什么時候用結構體,什么時候用類?

在Swift中,類和結構體有許多不同的特性。下面是兩者不同的總結:
  類支持繼承,結構體不支持。
  類是引用類型,結構體是值類型

  并沒有通用的規(guī)則決定結構體和類哪一個更好用。一般的建議是使用最小的工具來完成你的目標,但是有一個好的經驗是多使用結構體,除非你用了繼承和引用語義。

  注意:在運行時,結構體在性能方面更優(yōu)于類,原因是結構體的方法調用是靜態(tài)綁定,而類的方法調用是動態(tài)實現的。這就是盡可能得使用結構體代替類的又一個好的原因。

8、在swift中?的含義是什么
guard 使用場景
引發(fā) swift 可選類型
http://www.itdecent.cn/p/448cf4f8cf65

9、Swift 高階函數

map、filter、reduce 的作用

map 用于映射, 可以將一個列表轉換為另一個列表
filter 用于過濾, 可以篩選出想要的元素
reduce 合并

map 與 flatmap 的區(qū)別


swift4新特性 compactMap 替代了 flatmap


10、什么時候使用 @objc

@objc 用途是為了在 Objective-C 和 Swift 混編的時候, 能夠正常調用 Swift 代碼. 可以用于修飾類, 協議, 方法, 屬性.
常用的地方是在定義 delegate 協議中, 會將協議中的部分方法聲明為可選方法, 需要用到@objc

自己想到的,在實際開發(fā)業(yè)務時可能用到的一些面試題:

回傳值一般喜歡用 閉包還是代理 通知

頁面網絡加載的時候跳轉到其他界面怎么處理

友盟出現錯誤日志,但是沒有具體到頁面,怎么處理

設計封裝組件化功能模塊在完成功能的同時,優(yōu)先考慮什么方向優(yōu)化

如何優(yōu)化代碼

頁面有多個scrollView時,如何手勢不沖突

WechatIMG1431.jpeg
WechatIMG1432.jpeg
WechatIMG1433.jpeg
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容