1.mvc和mvp的區別與使用的優缺點
MVP中的V在iOS中指的是ViewController和View。MVP將MVC的ViewController進行拆分:視圖數據邏輯處理部分爲P,ViewController剩餘部分與View合併成V。V和P之間通過Protocol進行通信。
MVP實現了各模塊的解藕,具有更好的可測試性。但是總體代碼量比MVC大。
另外,iOS MVC更適用於快速開發,即代碼規模較小的項目。因此將簡單的MVC的Demo改成MVP,反而會顯得笨拙。
2.iOS打包成功之後,運行在iPhone上會閃退,黑屏
一種是證書錯誤,另一種就是當前的設備並不在開發者對應的賬號裏面。
3.OC的字典實現原理
哈希表:
哈希:1、哈希算法 2、md5 3、SHA1 ...
可以自己寫個哈希涵數,把名字 key按 26個首字母進行排序 可以用13個格子進行儲存,如果首字母相同的,可以增加一個增量,H=(H(key)+d)Mod m, d 從1開始計起 模於整個數量m=13,這樣做一個增加操作。實際中如果格子裏的重複數量越少,代表算法越好。效率越高。
4..iOS中的消息發送機制和消息轉發機制的區別
消息發送機制:
OC的函數調用成爲消息發送。屬於動態調用過程。在編譯的時候並不能決定真正調用哪個函數(事實證明,在編 譯階段,OC可以調用任何函數,即使這個函數並未實現,只要申明過就不會報錯。而C語言在編譯階段就會報錯)。只有在真正運行的時候纔會根據函數的名稱找 到對應的函數來調用。
消息轉發機制:
1.Method resolution 方法解析處理階段
2.Fast forwarding 快速轉發階段
3.Normal forwarding 常規轉發階段
5.祖件間的通訊
iOS業界討論組件化方案甚多,大體來說有3種。
- Protocol註冊方案
- URL註冊方案
- Target-Action runtime調用方案
MGJRoute方案
URL註冊方案 蘑菇街 App 的組件化之路 已經說的很清楚了 可以去看下
原理:
通過url註冊服務, 其他地方通過url, 獲取服務 框架在維護一個url-block的表格
特點:
- url維護成本高 硬解碼
- 可以在組件內部任何地方調用/註冊服務, 沒有必要統一組件接口服務
- 每個業務組件, 都需要依賴這個框架
6.SDWebImage是怎麼來清理緩存的?
1.根據時間順序來刪除,7天過期刪除掉。
2.把之前沒刪除的按時間順序存起來,按自定義的最大緩存來刪除,直到最大緩存一半爲止。
緩存計算,它的單位爲字節
[[[SDWebImageManager sharedManager] imageCache]getSize];
緩存圖片的數量
[[[SDWebImageManager sharedManager] imageCache] getDiskCount];
緩存清理,第一種是內存緩存,第二種是硬盤緩存
[[[SDWebImageManager sharedManager] imageCache] clearMemory];
[[[SDWebImageManager sharedManager] imageCache] clearDisk];
7.SDWebImage是怎麼處理接收的內存警告的?
AutoPurgeCache 繼承自 NSCache 自動清除緩存,調用NSCache 的 removeAllObjects方法。
8.SDWebImage中怎麼計算圖片的成本大小?
緩存大小
/**
* Get the size used by the disk cache
*/
- (NSUInteger)getSize;
// 注意:返回值單位爲字節
// 具體實現
- (NSUInteger)getSize {
__block NSUInteger size = 0;
dispatch_sync(self.ioQueue, ^{
NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:self.diskCachePath];
for (NSString *fileName in fileEnumerator) {
NSString *filePath = [self.diskCachePath stringByAppendingPathComponent:fileName];
NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];
size += [attrs fileSize];
}
});
return size;
}
9.SDWebImage中clear和clean有什麼樣的區別?
clear
全部刪除
clean
部分刪除
1.根據時間順序來刪除,7天過期刪除掉。
2.把之前沒刪除的按時間順序存起來,按自定義的最大緩存來刪除,直到最大緩存一半爲止。