AppDelegate的生命周期:
創(chuàng)建iOS工程的時候。其實就會創(chuàng)建一個UIApplication的對象,代表當(dāng)前的這個程序,作用是用來觀察應(yīng)用程序的狀態(tài)的改變。然后通知代表去針對這些狀態(tài)的改變做出相應(yīng)的反應(yīng)。
實現(xiàn)一系列的UIApplicationDelegate協(xié)議方法:
1.程序啟動成功之后會自動調(diào)用這個方法
這個方法是iOS真正的入口,iOS編程實質(zhì)就是在實現(xiàn)這個方法
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
//創(chuàng)建一個自己定義的window
//搭建UI界面,請求數(shù)據(jù),展示數(shù)據(jù)
print("程序啟動成功")
return true
}
2.應(yīng)用程序?qū)⒁兂煞腔钴S狀態(tài)的時候會自動調(diào)用這個方法:
應(yīng)用程序不顯示在手機屏幕上的時候就是非活躍狀態(tài)
a.按home鍵讓程序在后臺運行,來電可以將應(yīng)用程序變成非活躍狀態(tài)
func applicationWillResignActive(application: UIApplication) {
//一般在這個方法中關(guān)閉定時器,暫停視頻音頻的方法,讓游戲暫停。。。
print("將要變成非活躍狀態(tài)")
}
3.應(yīng)用程序已經(jīng)進入后臺的時候會調(diào)用這個方法
在應(yīng)用程序打開的時候按home才會進入后臺
func applicationDidEnterBackground(application: UIApplication) {
print("已經(jīng)進入后臺")
}
4.應(yīng)用程序?qū)⒁M入前臺:
從后臺打開應(yīng)用程序才算進入前臺
func applicationWillEnterForeground(application: UIApplication) {
//根據(jù)情況去開啟定時器,繼續(xù)播放視頻/音頻,繼續(xù)游戲
print("將要進入前臺")
}
5.應(yīng)用程序已經(jīng)變成活躍狀態(tài)的時候會調(diào)用這個方法:
從后臺回到前臺,或來電打斷結(jié)束(掛機)就會從非活躍狀態(tài)變成活躍狀態(tài)
func applicationDidBecomeActive(application: UIApplication) {
//根據(jù)情況去開啟定時器,繼續(xù)播放視頻/音頻,繼續(xù)游戲。。。
print("已經(jīng)變成活躍狀態(tài)")
}
6.應(yīng)用程序?qū)⒁K止的時候會調(diào)用這個方法:
一般情況下,只有從后臺強制將應(yīng)用程序退出的時候,程序才會終止
func applicationWillTerminate(application: UIApplication) {
//讓應(yīng)用程序不能在后臺運行:在info.plist文件中中添加key為 Application does not run in background,值為YES的鍵值對
print("程序?qū)⒁K止")
}
7.應(yīng)用程序接收到內(nèi)存警告的時候會自動調(diào)用這個方法:
func applicationDidReceiveMemoryWarning(application: UIApplication)
{
//銷毀一些不必要的內(nèi)存,一般在這兒去釋放一些緩存數(shù)據(jù)
print("接收到內(nèi)存警告")
}
AFNetworking的實現(xiàn)原理:
AFNetworking的介紹:
AFNetworking是實際項目最常用的一個網(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),緩存圖片
AFNetworking支持比較新的特性,簡單易用,但文檔數(shù)目一般,功能少,忽略了一些擴展功能。
AFNetworking實現(xiàn)原理:AFNetworking直接操作對象的AFHttpClient,是一個實現(xiàn)了NSCoding和NSCopying協(xié)議的NSObject子類,AFNetworking默認沒有封裝同步請求,如果開發(fā)者需要使用同步請求,則需要重寫getPath: paramenters: success: failures方法,對AFHttpRequestOperation進行同步處理。
AFNetworking涉及到的常用的請求方式GET和POST:
GET和POST的區(qū)別:
- 安全性問題:get請求的參數(shù)全部暴露在接口中,一般叫做明文請求或者叫做傻瓜式請求;post請求的參數(shù)一般是以字典的方式進行拼接,相對于get比較安全
- 對文件大小的要求:get不允許向服務(wù)器上傳文件(圖片,pdf,音視頻)
- 如果從服務(wù)器獲取數(shù)據(jù)或者查詢數(shù)據(jù)使用get請求,如果上傳數(shù)據(jù)到服務(wù)器或者修改服務(wù)器上的數(shù)據(jù)使用post
SDWebImage的實現(xiàn)原理:
SDWebImage的介紹:
SDWebImage使用來加載網(wǎng)絡(luò)圖片的第三方庫,實現(xiàn)了異步請求數(shù)據(jù),并且實現(xiàn)了圖片的緩存
SDWebImage的實現(xiàn)原理:
在內(nèi)存和沙盒目錄下各緩存一份文件,內(nèi)存中的文件到一定程度會自動清除,沙盒目錄下的文件需要由用戶手動清除,首先檢測內(nèi)存-再檢測沙盒目錄-網(wǎng)絡(luò)請求(前兩者都沒有才會進行網(wǎng)絡(luò)請求)
添加SDWebImage的頭文件
//UIImageView的類別
#import "UIImageView+WebCache.h"
//UIButton的類別
#import "UIButton+WebCache.h"
//UIImage的類別,用于加載動態(tài)圖(gif圖)
#import "UIImage+GIF.h"