一阔蛉、
- 1.frame與bounds的區(qū)別:
(1) Frame: frame的view是在父視圖的view坐標(biāo)系中的位置和大小(參照的是父視圖的坐標(biāo)系),但是當(dāng)view做了transform(形變)的時(shí)候,他的值就不準(zhǔn)確了
(2) Bounds: bounds的view是在本身坐標(biāo)系的位置和大小 (參照點(diǎn)是本身的坐標(biāo)系統(tǒng))
- 2.常見的設(shè)計(jì)模式
MVC贝奇、工廠供常、代理、KVO(觀察者)
- 3.MVC設(shè)計(jì)模式的理解
MVC:Model - View -Controller 模型負(fù)責(zé)數(shù)據(jù)任務(wù) 試圖負(fù)責(zé)呈現(xiàn) 以及和用于進(jìn)行交互 控制器用來控制試圖
- model 模型:主要負(fù)責(zé)存儲和操作數(shù)據(jù)
- view 視圖:主要負(fù)責(zé)展?示數(shù)據(jù)和?用戶交互
- controller 主要負(fù)責(zé)將model和view聯(lián)系起來:
- 從網(wǎng)絡(luò)獲取數(shù)據(jù)->賦值給數(shù)據(jù)模型->將model的數(shù)據(jù)傳遞給view展?示(響應(yīng)view的delegate和datasource?方法)->刷新view
二识腿、
- 2.get請求與post請求的區(qū)別
get是從服務(wù)器獲取數(shù)據(jù), post是向服務(wù)器請求數(shù)據(jù)
- 安全性的問題: GET請求的參數(shù)全部暴露在接口中,一般叫做明文請求或者傻瓜式請求, POST請求的參數(shù)一般是以字典的方式進(jìn)行拼接,相對于GET比較安全
- 對文件大小的要求: GET不允許向服務(wù)器上傳文件(圖片,pdf,音視頻)
- 如果從服務(wù)器獲取數(shù)據(jù)或者查詢數(shù)據(jù)使用GET請求,如果上傳數(shù)據(jù)到服務(wù)器或者修改服務(wù)器上數(shù)據(jù)使用POST
3.SDWebimage的實(shí)現(xiàn)原理
SDWebImage是用來加載網(wǎng)絡(luò)圖片的第三方庫,實(shí)現(xiàn)了異步請求數(shù)據(jù),并且實(shí)現(xiàn)了圖片的緩存
實(shí)現(xiàn)原理 :
在內(nèi)存和沙盒目錄下各緩存一份文件,內(nèi)存中的文件到一定程度會自動清除,沙盒目錄下的文件需要由用戶手動清除,首先檢測內(nèi)存-檢測沙盒目錄-網(wǎng)絡(luò)請求(就是省流量)
- 4.AFNetworking的實(shí)現(xiàn)原理
AFNetworking是實(shí)際項(xiàng)目中最常用的一個(gè)網(wǎng)絡(luò)請求庫,目前在github下載量排名第一,對應(yīng)的版本最新的為3.0, 2.0以前封裝自系統(tǒng)的NSURLConnection, 3.0之后(iOS9之后出來的), 封裝自系統(tǒng)的NSURLSession,主要使用異步數(shù)據(jù)請求,還可以檢測網(wǎng)絡(luò)狀態(tài),緩存圖片牲阁。
涉及到的常用的請求方式有GET和POST
創(chuàng)建一個(gè)get請求無參數(shù)
func dataRequestWithGet1() {
// http://d.yixincao.com/interface/getdata.php?act=list&type=nuanwen&page=1 GET請求的參數(shù)一般是以&拼接的
// 創(chuàng)建請求管理類
let manager = AFHTTPSessionManager()
// 參數(shù)1: 請求的借口
// 參數(shù)2: 需要的參數(shù)
// 參數(shù)3: 請求成功的回調(diào)
// 參數(shù)4: 請求失敗的回調(diào)
// 設(shè)置contentType, 默認(rèn)情況下表示的是application/json,如果為text/html格式的話需要手動設(shè)置
manager.responseSerializer.acceptableContentTypes = NSSet(object: "text/html") as! Set<NSObject>
// 設(shè)置解析器的類型
// AFNetworking在默認(rèn)情況下對數(shù)據(jù)做了解析,返回的是json格式
manager.responseSerializer = AFHTTPResponseSerializer() // 將數(shù)據(jù)轉(zhuǎn)為二進(jìn)制流
manager.GET("http://d.yixincao.com/interface/getdata.php?act=list&type=nuanwen&page=1", parameters: nil, success: { (dataTask:NSURLSessionDataTask?, responseObject:AnyObject?) -> Void in
// dataTask表示數(shù)據(jù)任務(wù)
// responseObject表示請求到的數(shù)據(jù)(二進(jìn)制流或者json格式), ,如果是json格式的話,返回的類型可能為數(shù)組患蹂、字典或者NSData
print(responseObject!)
}) { (dataTask, error) -> Void in
print("請求失敗\(error)")
}
}
創(chuàng)建一個(gè)get請求攜帶參數(shù)
func dataRequestWithGet2() {
// http://iappfree.candou.com:8080/free/applications/limited
let manager = AFHTTPSessionManager()
// 參數(shù)
let dic = ["currency": "rmb","page": "1"]
manager.GET("http://iappfree.candou.com:8080/free/applications/limited", parameters: dic, success: { (dataTask, responseObject) -> Void in
print(responseObject)
}) { (dataTask, error) -> Void in
print(error)
}
}
POST請求
func dataRequestWithPost() {
let manager = AFHTTPSessionManager()
// 解析器的設(shè)置和contentType的設(shè)置和get請求一樣
// 出現(xiàn)請求失敗: 原因是Request failed: unacceptable content-type: text/html
manager.responseSerializer.acceptableContentTypes = NSSet(object: "text/html") as! Set<NSObject> manager.POST("http://d.yixincao.com/interface/getdata.php?act=list&type=nuanwen&page=1", parameters: nil, success: { (dataTask, responseObject) -> Void in
print(responseObject)
}) { (dataTask, error) -> Void in
print(error)
}
}