iOS面試準備

1、YYModel在Swift中的使用與OC中有沒有什么不同?(此問題為小眾問題)

不同:
1)、無法將 Model 的屬性匹配到指定的 JSON/NSDictionary.
2)、無法將model屬性關聯到其他model
同:簡單的 JSON 與 Model 的轉換都可以。

2、項目中有C++怎么處理內存問題?###

內存分區:
1)、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧。
2)、堆區(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。
3)、全局區(靜態區)(static)—,全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。 - 程序結束后有系統釋放。注意:全局區又可分為未初始化全局區:.bss段和初始化全局區:data段。
4)、常量區—常量字符串就是放在這里的。 程序結束后由系統釋放
5)、代碼區—存放函數體的二進制代碼。

3、Swift上架過程中與OC有什么區別嗎?

沒有吧.

4、search搜索,搜索了5次,網絡比較慢,如何處理?###

答:多次請求使用GCD來實現,把用戶搜索請求加入隊列里進行執行,未執行完畢的任務取消,已執行完畢的任務過濾,只執行最新一次的搜索任務。(其中牽扯到線程通信的問題)

線程通信的問題?
答:????

5、OC種如何調用Swift中的枚舉?###

答:swift枚舉的數據類型是未指定的,在OC中找到對應的枚舉值,swift要在定義的時候定義枚舉值的類型,可以是string或NSInteger

6、怎么在不提交版本的情況下來修復程序出現的bug?

答:上架應用-熱修復:hotfix. 
hotfix是什么?
答:????

7、swift中week和unowned(昂偶的)的區別?###

共同點:都是弱引用,都是解決循環引用造成的內存無法釋放問題。
不同點:week修飾的是var類型的可選型;unowned修飾的是let(常量)類型的非可選型(不能是可選型).
unowned缺點:由于修復的不可設置為nil,打破循環的情況下, unowned修飾的對象會指向錯誤(不會知道nil,也不會知道對應對象,而是指向位置內存地址,所以需要保證unowned修飾的對象不能提前的設置為nil.
注意:不能修飾函數。(例如閉包強引用內存泄漏時無法使用week和unowned)

8、Rac?###

ReactiveCocoa(簡稱Rac),是有Github開源的一個應用于iOS和OS開發的新框架,Cocoa是蘋果整套框架的簡稱。
作用:可以把要處理的事情和監聽的事情的代碼放在一起,這樣非常方便我們管理,就不需要跳轉到對應的方法里,非常符合我們開發的高聚合、低耦合的思想。
編程思想:被描述為函數響應式編程(FRP)框架。
好處:用Rac解決問題 就不需要考慮調用順序,直接考慮結果,吧每次操作都寫成一系列嵌套的方法中,是代碼高聚合、低耦合。

9、Mvvm和mvc的優缺點?###

兩種模式的目的是為了實現一種動態的程序設計,簡化后續對軟件系統的修改和擴展,并使得程序的某一部分的復用成為可能。
MVC: 三個部分按照其各自的職責劃分:
數據Model: 負責封裝數據、存儲和處理數據運算等工作
視圖View: 負責數據展示、監聽用戶觸摸等工作
控制器Controller: 負責業務邏輯、事件響應、數據加工等工作.
在iOS中,M和V之間禁止通信,必須由C控制器層來協調M和V之間的變化。如下圖所示,C對M和V的訪問是不受限的,但M和V不允許直接接觸控制器層,而是由多種Callbacks(回調)方式來通知控制器.


FBb6RbV.png!web.jpeg

MVC的缺點:
1)、如果業務復雜起來,再加上其他亂七八糟的驗證,controller就會變得很大,越來越難以維護
MVVM是將“數據模型數據雙向綁定”的思想作為核心,因此在View和Model之間沒有聯系,通過ViewModel進行交互,而且Model和ViewModel之間的交互是雙向的,因此視圖的數據的變化會同時修改數據源,而數據源數據的變化也會立即反應到View上。
關于MVVM的優點:
1)、方便測試
在MVC下,Controller基本是無法測試的,里面混雜了個各種邏輯,而且分散在不同的地方。有了MVVM我們就可以測試里面的viewModel,來驗證我們的處理結果對不對(Xcode7的測試已經越來越完善了)。
2)、便于代碼的移植
比如iOS里面有iPhone版本和iPad版本,除了交互展示不一樣外,業務邏輯的model是一致的。這樣,我們就可以以很小的代價去開發另一個app。(以前做公司iPad的時候就深深感覺到,全部在VC里面是多么的痛苦和重新開發一個沒有啥區別)。
3)、兼容MVC
MVVM是MVC的一個升級版,目前的MVC也可以很快的轉換到MVVM這個模式。VC可以省去一大部分展示邏輯。
缺點:
1)、類會增多
每個VC都附帶一個viewModel,類的數量*2
2)、viewModel會越來越龐大
我們把邏輯給了viewModel,那勢必Model也會變得很復雜,里面的屬性和方法越來越多。可能重寫的方法比較多,因為涉及到一些數據的轉換以及和controller之間的通信。
3)、調用復雜度增加
由于數據都是從viewModel來,想想突然來了一個新人,一看代碼,不知道真實的模型是誰。比如常用tableview的數據源,一般都是一個數組,如果不斷的通過viewModel去取,溝通上沒有那么直接。況且每封一層,意味著要寫很多代碼去融合他們的轉換。

10、內存管理?###

MRC :OC內存管理遵循“誰創建,誰釋放,誰引用,誰管理”的機制,當創建或引用一個對象的時候,需要向她發送alloc、copy、retain消息,當 釋放該對象時需要發送release消息,當對象引用計數為0時,系統將釋放該對象,這是OC的手動管理機制(MRC)。
ARC: iOS 5.0之后引用自動管理機制——自動引用計數(ARC),管理機制與手動機制一樣,只是不再需要調用retain、release、 autorelease;它編譯時的特性,當你使用ARC時,在適當位置插入release和autorelease;它引用strong和weak關鍵 字,strong修飾的指針變量指向對象時,當指針指向新值或者指針不復存在,相關聯的對象就會自動釋放,而weak修飾的指針變量指向對象,當對象的擁 有者指向新值或者不存在時weak修飾的指針會自動置為nil。
如果使用alloc、copy(mutableCopy)或者retian一個對象時,你就有義務,向它發送一條release或者autorelease消息。其他方法創建的對象,不需要由你來管理內存。
向一個對象發送一條autorelease消息,這個對象并不會立即銷毀, 而是將這個對象放入了自動釋放池,待池子釋放時,它會向池中每一個對象發送 一條release消息,以此來釋放對象.
向一個對象發送release消息,并不意味著這個對象被銷毀了,而是當這個對象的引用計數為0時,系統才會調用dealloc方法,釋放該對象和對象本身它所擁有的實例。

11、oc和swift的優缺點?

12、cocoaPods 安裝和使用

13、輪播圖的原理?

14、推送的原理?

15、swift最新版本新出特性?

16、最新iOS9 適配?

17、項目上線新規?

18、怎么使用https請求?

19、藍牙打印機原理?

20、人臉識別原理?使用?

21、視頻直播原理 和使用?

22、指紋是被的原理和使用

23、蘋果支付的使用?

24、swift閉包強引用造成內存泄露怎么解決?

/*錯誤使用 內存泄露
例:
temperatureChange = { newTemperature in
//abs(Int) 返回絕對值
if abs(newTemperature - self.temperature) >= 10 {
print("這個不符合標準")
}else{
self.temperature = newTemperature
print("符合標準")
}
}
/
//解決:
//此處 如果沒有unowned self 意為閉包中self是若引用 self對象肯定存在
/
方法一:
temperatureChange = { [unowned self] newTemperature in
//abs(Int) 返回絕對值
if abs(newTemperature - self.temperature) >= 10 {
print("這個不符合標準")
}else{
self.temperature = newTemperature
print("符合標準")
}
}
*/
//方法二: 此處使用weak 意為弱引用 self對象可能不存在 所以需要判斷self 不為nil
temperatureChange = { [weak self] newTemperature in
if let weakself = self {
//abs(Int) 返回絕對值
if abs(newTemperature - weakself.temperature) >= 10 {
print("這個不符合標準")
}else{
weakself.temperature = newTemperature
print("符合標準")
}
}
}
Demo網址:https://github.com/zhangnianqq/Demos

25、簡述類目category優點和缺點。

優點:

  • 不需要通過增加子類而增加現有類的行為(方法),且類目中的方法與原始類方法基本沒有區別;
  • 通過類目可以將龐大一個類的方法進行劃分,從而便于代碼的日后的維護、更新以及提高代碼的閱讀性;
    缺點:
  • 無法向類目添加實例變量,如果需要添加實例變量,只能通過定義子類的方式;
  • 類目中的方法與原始類以及父類方法相比具有更高優先級,如果覆蓋父類的方法,可能導致super消息的斷裂。因此,最好不要覆蓋原始類中的方法。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • OC的理解與特性 OC作為一門面向對象的語言,自然具有面向對象的語言特性:封裝、繼承、多態。它既具有靜態語言的特性...
    克魯德李閱讀 458評論 0 0
  • http://www.devstore.cn/essay/essayInfo/6525.html【原文地址】 序言...
    起名好難_fz閱讀 670評論 1 1
  • 序言 目前形勢,參加到iOS隊伍的人是越來越多,甚至已經到供過于求了。今年,找過工作人可能會更深刻地體會到今年的就...
    麥兜兜買兜兜閱讀 689評論 1 4
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,211評論 30 472
  • 來自網絡 序言 目前形勢,參加到iOS隊伍的人是越來越多,甚至已經到供過于求了。今年,找過工作人可能會更深刻地體會...
    用心在飛閱讀 846評論 5 4