MVC設計模式
設計模式:前人總結的經驗、方法和工具
委托、觀察者、單例 工廠
Model-View-Controller 模型-視圖-控制器
在iOS開發中應用較為廣泛的設計模式
Model 模型 處理數據或者處理業務邏輯
View 視圖 程序與用戶交互的界面,用戶可以看到它的存在
Controller 控制器 處理用戶交互的 負責視圖和模型之間的數據及請示的傳遞
Controller-View Controller-Model
View跟Model之間沒有直接的操作
View:webView
Model:request sina
controller:ViewCtroller
用戶點擊了View View將用戶操作傳遞給了控制器、控制器讓Model更新、Model操作過之后 通知控制器我搞定了 控制器去刷新UI
區別于DAO設計模式 DAO其實只是相當于MVC中Model的功能
授權
access_token
TimeLineViewController 公共微博
M:ZYSinaEngine 負責跟新浪相關、請求模塊
V:ZYLoginWebView 負責展示授權界面 以供用戶交互
C:ZYTimeLineViewController 負責管理V以及V上數據的展示 V和M之間的數據以及請求的傳遞
類與類/(對象與對象)之間交互:1、通知 2、代理(協議) 3、PRoperty:需創建對象
按照MVC來設計代碼
新建ZYLoginWebView繼承于UIView
在ZYLoginWebView.h中添加webView屬性
在ZYLoginWebView的初始化方法中 創建初始化webView 并添加
設置代理 導入協議 實現兩個協議方法
重寫layoutSubviews方法 方法中設置webView的frame
讓webView加載請求 請求歸M管 新建Model類ZYSinaEngine
在ZYSinaEngine類中添加加號方法(方便)authorizeReuqest返回一個請求
authorizeReuqest方法實現時 需要很多新浪創建的應用的參數 而且參數會多次用到 所以宏定義在ZYSinaEngine中
在ZYLoginWebView.h中定義 ****- (void)loadAuthorizeRequest:(NSURLRequest *)request;
在TimeLineViewController中 創建并初始化ZYLoginWebView 然后 加載請求
在webView代理方法中接收code
接收到code后 需要告訴TimeLineViewController 使用協議
因為是ZYLoginWebView想給別人傳信息 所以在ZYLoginWebView中應該有一個委托對象屬性id<協議名> delegate
在ZYLoginWebView中寫協議方法 并且在.m中調用協議方法
NSError的構成
TimeLineViewController實現代理方法 拿到code
在ZYSinaEngine中 聲明一個實例方法 根據code請求accesstoken
拿到token后 告訴Controller拿到accesstoken 使用協議
因為是ZYSinaEngine想給別人傳信息 所以在ZYSinaEngine中應該有一個委托對象屬性 id<協議名> delegate
在ZYSinaEngine中寫協議方法 并且在.m中使用代理對象調用協議方法 因為協議方法為可選方法 所以應加判斷 代理對象是否存在且是否可以相應代理方法
TimeLineViewController實現代理方法 拿到access_token
在ZYSinaEngine中 聲明一個實例方法 根據accesstoken請求公共微博數據
拿到數據后 解析 告訴Controller拿到數據 使用協議 可以使用ZYSinaEngineDelegate
新聞熱點
疑難解答