1.封裝網(wǎng)絡(luò)請求
好處:可以降低網(wǎng)絡(luò)請求方法與控制器的耦合度,即使網(wǎng)絡(luò)使用第三方框架發(fā)生不兼容端朵,錯誤等問題從而想換框架時好芭,也不用到每個控制器里面改代碼;建立單例工具類冲呢,方便管理舍败。優(yōu)化代碼結(jié)構(gòu)。
1.有沒有用過多線程敬拓,解釋下多線程瓤湘?
多線程的作用是:可以解決負載均衡問題,充分利用cpu資源恩尾,為了提高CPU的使用率弛说,采用多線程的方式去同時完成幾件事情而互不干擾。
大多情況下翰意,要用到多線程的主要是需要大量的io操作時木人,或處理的情況需要花大量的時間等等,比如讀寫文件冀偶、視頻圖像的采集醒第、處理、顯示进鸠、保存等稠曼。
缺點:大量的線程降低代碼的可讀性、更多的線程需要更多的內(nèi)存空間客年。當多線程對一個資源出現(xiàn)爭奪的時候要注意線程安全的問題霞幅。
iOS有三種方法:1.NSThead漠吻,2.NSOperation、GCD
1.NSThead:相比其他兩個要輕量級司恳,但是需要手動管理線程的生命周期途乃,線程同步。
2.NSOperation:
2.線程同步的方法
1.@synthsize 3.并行
2.NSLock :同步代碼塊 上鎖
AVPlayer來實現(xiàn)播放
AVPlayerItem負責提供視頻信息扔傅,AVPlayer負責管理和調(diào)控耍共,AVPlayerLayer顯示視頻,
首先:得到視頻的URL
根據(jù)URL創(chuàng)建AVPlayerItem猎塞。
把AVPlayer提供個AVPlayer
AVPlayerLayer顯示視頻试读。AVPlayer控制視頻,播放荠耽,暫停鹏往,跳轉(zhuǎn)等。
1.assign可以修飾OC對象么骇塘?
答案:assign是指針賦值,不對引用計數(shù)操作韩容,使用之后如果沒有置為nil款违,可能就會產(chǎn)生野指針。
2.delegate的生命周期
3.A跳轉(zhuǎn)BB跳轉(zhuǎn)C 他們之間的傳值你用什么方法傳群凶?屬性還是代理
4.關(guān)于TableView的內(nèi)存優(yōu)化
1.正確地使用Cell的重用機制
2.提前計算好cell的高度和布局
UITableView的回調(diào)順序是先多次調(diào)用tableView:heightForRowAtIndexPath:
用來確定contentsize
及cell的位置插爹,然后才會調(diào)用tableView:cellForRowAtIndexPath:
,從而來顯示當前屏幕的cell请梢。
iOS9會更厲害赠尾,還會華東邊調(diào)用tableView:heightForRowIndexPath:
,可見這個方法里一定不會重復進行大量的計算毅弧。我們應(yīng)該提前計算好車cell的高度并且緩存起來气嫁,在回調(diào)時直接把高度值直接返回。
3.避免阻塞主線程
很多時候我們需要從網(wǎng)絡(luò)請求圖片等够坐,把這些操作放在后臺操作寸宵,并且緩存起來
4.按需加載
5.減少subviews的數(shù)量
6.盡可能重用開銷比較大的對象
如NSDateFormatter
和NSCalendar
等對象初始化非常慢,我們可以把它加入類的屬性中元咙,或者創(chuàng)建單例來使用
7.圓角梯影、陰影之類的全部bitmap化,或者放到后臺draw好了再拿出來(離屏渲染)
解決方法:
1.開啟CALayer.shouldRasterize 庶香,轉(zhuǎn)嫁到CPU上甲棍;
2.粗暴畫圖/截圖實現(xiàn)border和圓角;
8.不要動態(tài)的添加或者移除子控件
如果是較大或者不常用的圖片資源赶掖,采用imageWithContentsOfFile:感猛。
5.ARC下關(guān)于內(nèi)存泄露都有哪些七扰?
1.block的循環(huán)引用
2.NSTimer
在使用NSTimer addtarget
,為了防止target被釋放而導致的程序異常唱遭,timer會持有target戳寸。
解決方法:使用invalidate方法消掉timer。
3performSelector系列
6.A push b b push c為了防止內(nèi)存泄露可以做哪些拷泽?
7.單例模式是什么疫鹊?優(yōu)缺點
單例模式就是只有一個實例,確保某一個類只有一個實例司致,而且自行實例化并向整個系統(tǒng)提供這個實例拆吆。并提供一個全局訪問點去訪問它。
優(yōu)點:
1.提供了對唯一實例的受控訪問脂矫;
2.由于系統(tǒng)內(nèi)存中只存在一個對象枣耀,因此可以節(jié)約系統(tǒng)資源,對于一些需要憑和銷毀的對象單例模式無疑可以系統(tǒng)的性能
缺點:
1.不可以擴展
2庭再,濫用單例將帶來一些負面問題捞奕,如為了節(jié)省資源將數(shù)據(jù)庫連接池對象設(shè)計為的單例類,可能會導致共享連接池對象的程序過多而出現(xiàn)連接池溢出拄轻,如果實例化的對象長時間不被利用颅围,系統(tǒng)會認為是垃圾而被回收,這將導致對象狀態(tài)丟失恨搓。
8.屬性跟成員變量的區(qū)別
1.屬性對成員變量擴充了存取方法
2.屬性默認會生帶下劃線的成員變量
9.imageNamed和imageWithContentsOfFile
這個知道的人比較多院促,因為緩存圖片的消耗通常是肉眼可見的多。
常用的元素例如icon之類的斧抱,采用imageNamed:常拓,系統(tǒng)會有緩存。
10.歸檔有哪些方法辉浦?
1.plist
2.NSUsererDefaults
NSUsererDefaults可以保持個nil么弄抬?可以
12
上拉刷新下拉加載的實現(xiàn)原理
1.下拉刷新實際上是監(jiān)測UIScrollView的contentOffset的Y值,當他往下拉動時宪郊,UIScrollView的contentOffset是一個減小的眉睹,然后把通過動畫把它的contentInset值控制成一個定值,然后通過設(shè)置延時把UIScrollView的contentInset的值恢復到原點废膘。
2.上拉加載其實原理和下拉刷新基本是一樣的竹海,只不過判斷的contentOffset的值不同,如果scrollView.bounds.size.height+scrollView.contentOffset.y>scrollView.contentSize.height,說明你執(zhí)行了上拉操作丐黄。
block的實現(xiàn)一個帶參數(shù)的
獲取2個數(shù)的最大公約數(shù)斋配。或者最小公倍數(shù)
最大公約數(shù)的兩個算法
有兩整數(shù)a和b:
① a%b得余數(shù)c
② 若c=0,則b即為兩數(shù)的最大公約數(shù)
③ 若c≠0艰争,則a=b坏瞄,b=c,再回去執(zhí)行①
OC
//相除法
-(NSInteger)commonNumber{
NSInteger fenzi = a>b ? a: b;
for (NSInteger i = fenzi; i>=0; i--) {
if (a%i==0&b%i==0) {
return i;
}
}
return 1;
}
swift(不會用swift的for循環(huán)從大到小甩卓,怪折騰的...)
func ssCommonNumber()->NSInteger
{
var a = NSInteger()
var b = NSInteger()
a = 12
b = 18
var fenzi = NSInteger()
fenzi = a > b ? a : b
for i in ((0 + 1)...fenzi).reversed() {
let c = a % i
let d = b % i
if (c == 0) && (d == 0){
return i
}
}
return 1
}
有兩整數(shù)a和b:
① 若a>b鸠匀,則a=a-b
② 若a<b,則b=b-a
③ 若a=b逾柿,則a(或b)即為兩數(shù)的最大公約數(shù)
④ 若a≠b缀棍,則再回去執(zhí)行①
OC
//相減法
-(void)addWithCommonNumber{
while (a!=b) {
if (a>b) {
a = a-b;
}else{
b = b- a;
}
}
NSLog(@"相減法得到最大公約數(shù)是:%ld",a);
}
swift
func CommonNumber()->NSInteger
{
var a = NSInteger()
var b = NSInteger()
a = 12
b = 18
while a != b {
if a>b {
a=a - b
}else{
b = b - a;
}
}
return a;
}
最小公倍數(shù)
兩個數(shù)相乘除以最大公約數(shù)就是最小公倍數(shù)
MVC、MVVM机错、MVP的區(qū)別
models-負責主要的數(shù)據(jù)或者操作數(shù)據(jù)的數(shù)據(jù)訪問層
views-負責展示層
contorller爬范、presenter、ViewModel-負責協(xié)調(diào)model和view弱匪,通常會根據(jù)用戶在view上的動作在model上作出對應(yīng)的更改青瀑,同時將更改的信息返回到view上。
MVC優(yōu)缺點
蘋果官方給出的優(yōu)缺點
優(yōu)點:
1.同時開發(fā)-多個開發(fā)人員可以在模型萧诫,控制器和視圖上同時工作斥难。
2.高凝聚力-MVC可以在控制器上進行相關(guān)的動作的邏輯分組。特定模型的視圖也會分組在一起
3.低耦合-MVC框架的本質(zhì)就是模型帘饶、視圖或控制器之間的耦合度較低
4.易于修改-由于責任分離哑诊,未來的開發(fā)或修改更容易
5.模型的多個視圖-模型可以有多個視圖
缺點:
1.代碼導航-框架導航可能是復雜的,因為它引入了新的抽象層尖奔,并要求用戶適應(yīng)MVC的分解標準。
2.多工件一致性-將一個特性分解為三個工件導致散射穷当,因此提茁,要求開放人員一次維護多個表示的一致性。
3.顯著的學習曲線-多種技術(shù)的支持成為標準馁菜。使用mvc的開發(fā)人員需要精通多種技術(shù)茴扁。
工廠模式
其實就是創(chuàng)建對象
UIButton到NSObject的類
UIButton->UIControl->UIView->UIReponder->NSObject
category為什么不能添加屬性?
一個類中用@property聲明屬性汪疮。編譯器會自動幫我們生成成員變量和setter/getter峭火,單分類的指針結(jié)構(gòu)體中,根本沒有屬性列表智嚷,所以分類中用@property聲明屬性卖丸,既無法生產(chǎn)成員變量也無法生成setter/getter。
因為OC是動態(tài)語言盏道,方法真正的實現(xiàn)是通過runtime完成的稍浆,我們可以通過runtime手動添加setter/getter方法。