1盯腌、YYModel在Swift中的使用與OC中有沒有什么不同孽锥?(此問題為小眾問題)
不同:
1)逮光、無法將 Model 的屬性匹配到指定的 JSON/NSDictionary.
2)卒落、無法將model屬性關(guān)聯(lián)到其他model
同:簡單的 JSON 與 Model 的轉(zhuǎn)換都可以。
2嫩与、項目中有C++怎么處理內(nèi)存問題寝姿?###
內(nèi)存分區(qū):
1)、棧區(qū)(stack)— 由編譯器自動分配釋放 划滋,存放函數(shù)的參數(shù)值饵筑,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧处坪。
2)根资、堆區(qū)(heap) — 一般由程序員分配釋放, 若程序員不釋放同窘,程序結(jié)束時可能由OS回收 玄帕。
3)、全局區(qū)(靜態(tài)區(qū))(static)—想邦,全局變量和靜態(tài)變量的存儲是放在一塊的裤纹,初始化的全局變量和靜態(tài)變量在一塊區(qū)域, 未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域案狠。 - 程序結(jié)束后有系統(tǒng)釋放服傍。注意:全局區(qū)又可分為未初始化全局區(qū):.bss段和初始化全局區(qū):data段。
4)骂铁、常量區(qū)—常量字符串就是放在這里的。 程序結(jié)束后由系統(tǒng)釋放
5)罩抗、代碼區(qū)—存放函數(shù)體的二進制代碼拉庵。
3、Swift上架過程中與OC有什么區(qū)別嗎套蒂?
沒有吧.
4钞支、search搜索,搜索了5次,網(wǎng)絡(luò)比較慢,如何處理?###
答:多次請求使用GCD來實現(xiàn)操刀,把用戶搜索請求加入隊列里進行執(zhí)行烁挟,未執(zhí)行完畢的任務(wù)取消,已執(zhí)行完畢的任務(wù)過濾骨坑,只執(zhí)行最新一次的搜索任務(wù)撼嗓。(其中牽扯到線程通信的問題)
線程通信的問題琼了?
答:????
5婉支、OC種如何調(diào)用Swift中的枚舉?###
答:swift枚舉的數(shù)據(jù)類型是未指定的,在OC中找到對應(yīng)的枚舉值蜈亩,swift要在定義的時候定義枚舉值的類型,可以是string或NSInteger
6壤玫、怎么在不提交版本的情況下來修復(fù)程序出現(xiàn)的bug精绎?
答:上架應(yīng)用-熱修復(fù):hotfix.
hotfix是什么?
答:?杏头?盈包??
7醇王、swift中week和unowned(昂偶的)的區(qū)別续语?###
共同點:都是弱引用,都是解決循環(huán)引用造成的內(nèi)存無法釋放問題厦画。
不同點:week修飾的是var類型的可選型;unowned修飾的是let(常量)類型的非可選型(不能是可選型).
unowned缺點:由于修復(fù)的不可設(shè)置為nil,打破循環(huán)的情況下疮茄, unowned修飾的對象會指向錯誤(不會知道nil,也不會知道對應(yīng)對象,而是指向位置內(nèi)存地址,所以需要保證unowned修飾的對象不能提前的設(shè)置為nil.
注意:不能修飾函數(shù)。(例如閉包強引用內(nèi)存泄漏時無法使用week和unowned)
8根暑、Rac?###
ReactiveCocoa(簡稱Rac),是有Github開源的一個應(yīng)用于iOS和OS開發(fā)的新框架,Cocoa是蘋果整套框架的簡稱力试。
作用:可以把要處理的事情和監(jiān)聽的事情的代碼放在一起,這樣非常方便我們管理排嫌,就不需要跳轉(zhuǎn)到對應(yīng)的方法里畸裳,非常符合我們開發(fā)的高聚合、低耦合的思想淳地。
編程思想:被描述為函數(shù)響應(yīng)式編程(FRP)框架怖糊。
好處:用Rac解決問題 就不需要考慮調(diào)用順序,直接考慮結(jié)果颇象,吧每次操作都寫成一系列嵌套的方法中伍伤,是代碼高聚合、低耦合遣钳。
9扰魂、Mvvm和mvc的優(yōu)缺點?###
兩種模式的目的是為了實現(xiàn)一種動態(tài)的程序設(shè)計蕴茴,簡化后續(xù)對軟件系統(tǒng)的修改和擴展劝评,并使得程序的某一部分的復(fù)用成為可能。
MVC: 三個部分按照其各自的職責劃分:
數(shù)據(jù)Model: 負責封裝數(shù)據(jù)倦淀、存儲和處理數(shù)據(jù)運算等工作
視圖View: 負責數(shù)據(jù)展示蒋畜、監(jiān)聽用戶觸摸等工作
控制器Controller: 負責業(yè)務(wù)邏輯、事件響應(yīng)撞叽、數(shù)據(jù)加工等工作.
在iOS中姻成,M和V之間禁止通信插龄,必須由C控制器層來協(xié)調(diào)M和V之間的變化。如下圖所示佣渴,C對M和V的訪問是不受限的辫狼,但M和V不允許直接接觸控制器層,而是由多種Callbacks(回調(diào))方式來通知控制器.
MVC的缺點:
1)辛润、如果業(yè)務(wù)復(fù)雜起來膨处,再加上其他亂七八糟的驗證,controller就會變得很大砂竖,越來越難以維護
MVVM是將“數(shù)據(jù)模型數(shù)據(jù)雙向綁定”的思想作為核心真椿,因此在View和Model之間沒有聯(lián)系,通過ViewModel進行交互乎澄,而且Model和ViewModel之間的交互是雙向的突硝,因此視圖的數(shù)據(jù)的變化會同時修改數(shù)據(jù)源,而數(shù)據(jù)源數(shù)據(jù)的變化也會立即反應(yīng)到View上置济。
關(guān)于MVVM的優(yōu)點:
1)解恰、方便測試
在MVC下,Controller基本是無法測試的浙于,里面混雜了個各種邏輯护盈,而且分散在不同的地方。有了MVVM我們就可以測試里面的viewModel羞酗,來驗證我們的處理結(jié)果對不對(Xcode7的測試已經(jīng)越來越完善了)腐宋。
2)、便于代碼的移植
比如iOS里面有iPhone版本和iPad版本檀轨,除了交互展示不一樣外胸竞,業(yè)務(wù)邏輯的model是一致的。這樣参萄,我們就可以以很小的代價去開發(fā)另一個app卫枝。(以前做公司iPad的時候就深深感覺到,全部在VC里面是多么的痛苦和重新開發(fā)一個沒有啥區(qū)別)拧揽。
3)剃盾、兼容MVC
MVVM是MVC的一個升級版,目前的MVC也可以很快的轉(zhuǎn)換到MVVM這個模式淤袜。VC可以省去一大部分展示邏輯。
缺點:
1)衰伯、類會增多
每個VC都附帶一個viewModel铡羡,類的數(shù)量*2
2)、viewModel會越來越龐大
我們把邏輯給了viewModel意鲸,那勢必Model也會變得很復(fù)雜烦周,里面的屬性和方法越來越多尽爆。可能重寫的方法比較多读慎,因為涉及到一些數(shù)據(jù)的轉(zhuǎn)換以及和controller之間的通信漱贱。
3)、調(diào)用復(fù)雜度增加
由于數(shù)據(jù)都是從viewModel來夭委,想想突然來了一個新人幅狮,一看代碼,不知道真實的模型是誰株灸。比如常用tableview的數(shù)據(jù)源崇摄,一般都是一個數(shù)組,如果不斷的通過viewModel去取慌烧,溝通上沒有那么直接逐抑。況且每封一層,意味著要寫很多代碼去融合他們的轉(zhuǎn)換屹蚊。
10厕氨、內(nèi)存管理?###
MRC :OC內(nèi)存管理遵循“誰創(chuàng)建汹粤,誰釋放命斧,誰引用,誰管理”的機制玄括,當創(chuàng)建或引用一個對象的時候冯丙,需要向她發(fā)送alloc、copy遭京、retain消息胃惜,當 釋放該對象時需要發(fā)送release消息,當對象引用計數(shù)為0時哪雕,系統(tǒng)將釋放該對象船殉,這是OC的手動管理機制(MRC)。
ARC: iOS 5.0之后引用自動管理機制——自動引用計數(shù)(ARC)斯嚎,管理機制與手動機制一樣利虫,只是不再需要調(diào)用retain、release堡僻、 autorelease糠惫;它編譯時的特性,當你使用ARC時钉疫,在適當位置插入release和autorelease硼讽;它引用strong和weak關(guān)鍵 字,strong修飾的指針變量指向?qū)ο髸r牲阁,當指針指向新值或者指針不復(fù)存在固阁,相關(guān)聯(lián)的對象就會自動釋放壤躲,而weak修飾的指針變量指向?qū)ο螅攲ο蟮膿?有者指向新值或者不存在時weak修飾的指針會自動置為nil备燃。
如果使用alloc碉克、copy(mutableCopy)或者retian一個對象時,你就有義務(wù),向它發(fā)送一條release或者autorelease消息。其他方法創(chuàng)建的對象,不需要由你來管理內(nèi)存并齐。
向一個對象發(fā)送一條autorelease消息,這個對象并不會立即銷毀, 而是將這個對象放入了自動釋放池,待池子釋放時,它會向池中每一個對象發(fā)送 一條release消息,以此來釋放對象.
向一個對象發(fā)送release消息,并不意味著這個對象被銷毀了,而是當這個對象的引用計數(shù)為0時,系統(tǒng)才會調(diào)用dealloc方法,釋放該對象和對象本身它所擁有的實例漏麦。
11、oc和swift的優(yōu)缺點冀膝?
12唁奢、cocoaPods 安裝和使用
13、輪播圖的原理窝剖?
14麻掸、推送的原理?
15赐纱、swift最新版本新出特性脊奋?
16、最新iOS9 適配疙描?
17诚隙、項目上線新規(guī)?
18起胰、怎么使用https請求久又?
19、藍牙打印機原理效五?
20地消、人臉識別原理?使用畏妖?
21脉执、視頻直播原理 和使用?
22戒劫、指紋是被的原理和使用
23半夷、蘋果支付的使用?
24迅细、swift閉包強引用造成內(nèi)存泄露怎么解決巫橄?
/*錯誤使用 內(nèi)存泄露
例:
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網(wǎng)址:https://github.com/zhangnianqq/Demos
25、簡述類目category優(yōu)點和缺點茵典。
優(yōu)點:
- 不需要通過增加子類而增加現(xiàn)有類的行為(方法),且類目中的方法與原始類方法基本沒有區(qū)別;
- 通過類目可以將龐大一個類的方法進行劃分,從而便于代碼的日后的維護嗦随、更新以及提高代碼的閱讀性;
缺點: - 無法向類目添加實例變量,如果需要添加實例變量,只能通過定義子類的方式;
- 類目中的方法與原始類以及父類方法相比具有更高優(yōu)先級,如果覆蓋父類的方法,可能導(dǎo)致super消息的斷裂。因此,最好不要覆蓋原始類中的方法敬尺。