1.如何在OC中調用swift的文件?
步驟:直接托swift文件 --> 建立橋接頭文件 --> target --> building
setting--> 輸入product --> Packaging --> Project ModuleName
--> SwiftModule --> 在橋接頭文件里加入頭文件#import "SwiftModule-
swift.h"
作用: 此頭文件中就包含了所有.swift的文件
2.get和post的區別?
解答:
a.安全性問題:get請求的參數全部暴露在接口中,一般叫做明文請求或者是傻瓜式請
求,post請求的參數一般以字典的方式進行拼接,相對于get比較安全
b.對文件大小的一個要求:get請求不允許向服務器上傳文件(圖片,PDF,音視
頻),一般以post進行上傳文件
c.如果從服務器獲取數據或者查詢數據使用get請求,如果上傳數據到服務器或者修改
服務器上數據使用post
3.錯誤處理:unacceptable content-type: text/html?
解決方案:
manager.responseSerializer.acceptableContentTypes = NSSet(object: "text/html") as! Set < String >
4.了解:APPDelegate和viewController的生命周期
AppDelegate的生命周期:貫穿整個程序的從開始到結束的全過程
詳解:
application(程序啟動入口) --> applicationWillResignActive(將進入活躍
狀態)--> applicationDidBecomeActive(已經進入活躍狀態) -->
applicationDidEnterBackground(進入后臺) -->
applicationWillEnterForeground(將進入前臺) -->
applicationWillTerminate (程序將被中斷的)ViewController的生命周期:是指視圖View從加載到注銷加載的全過程
詳解:
init(創建視圖) --> loadView(開始加載)--> viewDidLoad(加載成功) -->
viewWillAppear(視圖將要出現) --> viweDidAppear(視圖顯示出來) -->
viewWillDisappear(視圖將要消失) --> viewDidDisappear(視圖已經消失) -->
viewDidUnload(注銷加載) --> dealloc(被釋放)
參考文檔
5.SDWebImage在內存中的實現原理?
作用:SDWebImage是用來加載網絡圖片的第三方庫,實現了異步請求數據,并且實現了圖片的緩存
解答: 在內存和沙盒目錄下各緩存一份文件,內存中的文件到一定程度會自動清除,沙盒目錄下的文件需要由用戶手動清除,首先檢測內存 --> 檢測沙盒目錄 --> 網絡請求(都沒有時才會進行網絡請求)
5.1.AFNetworking的實現原理
NSURLConnection,主要對NSURLConnection進行了進一步的封裝,包含以下核心的類:
AFURLConnectionOperation
AFHTTPRequestOperationManager
AFHTTPRequestOperation
NSURLsession
NSURLSession對象進行了進一步的封裝,包含以下核心的類:AFURLSessionManager
AFHTTPSessionManagerReachability,提供了與網絡狀態相關的操作接口,包含以下核心的類:
AFNetworkReachabilityManager
Security,提供了與安全性相關的操作接口,包含以下核心的類:
AFSecurityPolicy
Serialization,提供了與解析數據相關的操作接口,包含以下核心的類:
AFURLRequestSerialization
AFURLResponseSerialization
6.版本迭代
作為一款產品,總會有一些共性,從一開始的誕生到 —— 開始的不完善到不斷的自我完善,然后再不斷的變更需求、改動功能、修改bug和優化性能等中更換版本使之適應各種環境和外部需求得以生存壯大。
7.KVC和KVO的區別
回答:
官方回答
- KVC是鍵值編碼,該機制可以不通過存取方法就可以訪問對象的實例變量,可以通過一個字符串的key(屬性名)修改對象的屬性值,
- KVO是鍵值監聽,可以監聽一個對象屬性值的改變,是一種能使的對象獲取到其他對象屬性變化的通知機制
- 實現KVO鍵值觀察模式,被觀察的對象必須使用KVC鍵值編碼來修改他的實例變量,這樣才能被觀察者觀察到,因此,KVC和KVO的基礎或者說KVO的實現是建立在KVC的基礎上的
個人理解:
KVC即是指 NSKeyValueCoding,一個非正式的Protocol,提供一種機制來間接訪問對象的屬性。而不是通過調用Setter、Getter方法訪問。KVO 就是基于 KVC 實現的關鍵技術之一。
—(id)valueForKey:(NSString *)key;
—(void)setValue:(id)value forKey:(NSString *)key;KVO的是KeyValue Observe的縮寫,中文是鍵值觀察。這是一個典型的觀察者模式,觀察者在鍵值改變時會得到通知。
addObserver:forKeyPath:options:context:;
observeValueForKeyPath:ofObject:change:context:KVO需要注意在對象銷毀時,要移除觀察者,不然會崩潰。
removeObserver:forKeyPath:context:
KVO是同步執行,不能執行耗時方法,KVO可能發生資源搶奪
8.類方法和實例方法的區別
類方法:
- 類方法屬于類對象
- 類方法只能通過類對象調用
- 類方法中的self是類對象
- 類方法可以調用其他類方法
- 類方法中不能訪問成員變量
- 類方法不能直接調用對象方法
實例方法:
- 實例方法是屬于實例對象的
- 實例方法只能呢通過實例對象調用
- 實例方法中的self是實例對象
- 實例方法中可以訪問成員變量
- 實例方法中直接調用實例方法
- 實例方法中野可以調用類方法(通過類名)
9.繼承和擴展的區別
解答:
在 Swift 中,類
可以調用和訪問超類的方法,屬性和附屬腳本,并且可以重寫這些方法,屬性和附屬腳本來優化或修改它們的行為。Swift 會檢查你的重寫 義在超類中是否有匹配的定義,以此確保你的重寫行為是正確的。
在 Swift 中,擴展
就是向一個已有的類、結構體或枚舉類型添加新功能,這包括在沒有權限獲取原始源代碼的情況下擴展類型的能力
Swift中的擴展可以:添加計算屬性和計算靜態屬性
添加實例方法和類型方法
提供新的構造器
添加下標腳本
定義和使用新的嵌套類型區別:
- 繼承可以寫所有類型的屬性,類別只能擴展計算性屬性
- 繼承可以寫所有類的的構造方法,但類別只能擴展便利構造方法,不能擴展指定構造方法
10.繼承和類別的類別
回答:
類別是對一個功能完備類的補充,比如一個Animal類,具有run和eat方法,想給類增加一個bark方法,可以使用類別。
而多個類具有相同的實例變量和方法時,考慮用繼承,即子類可以繼承父類相同的特性,比如Animal類具有年齡和體重兩個屬性,Dog也具有年齡和體重兩個屬性,Dog就可以繼承Animal的兩個屬性,即為繼承。
共同點是都給類進行了擴展。
區別:1.類別是對方法的擴展,不能添加成員變量,繼承可以在父類的成員變量基礎上添加新的成員變量。
2.類別只能添加新方法,而不能修改和刪除原來的方法,繼承可以增加、修改和刪除方法。
3.類別不提倡對原有方法進行重載,繼承可以使用super對原來的方法進行重載
4.類別可以被繼承,如果一個父類中定義了一個類別,那么子類中也會繼承此