日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

iOS中的MVP模式初探

瀏覽:22日期:2022-09-17 11:04:11

以前在項目中都寫的是MVC模式, 由于現在在項目中要學習MVP模式, 所以找了一個Demo研究了一下. 就簡單說說自己的看法吧.

先說一下MVC模式, 示意圖如下:

iOS中的MVP模式初探

MVC模式示意圖

模型拿到數據, 可能是數據庫或者網絡數據

最簡單的比方, 我們拿到一個模型數組了之后, 這個就相當于是一個數據源.

將數據傳遞給控制器, 控制器經過簡單地加工

數據源經過簡單地處理加工, 比如在tableView中, 我們可能會使用數據源方法, 將模型數組中的元素取出來, 傳遞給View層, 比如cell

將加工后的數據展示出來

cell展示模型中的數據

那么MVP模式又是怎樣的呢?請看下圖

iOS中的MVP模式初探

MVP模式示意圖

從上圖可以看出, 從MVC中又抽象出了P層, 即Presenter層

Controller其實將view和viewController傳遞給了P層, 這樣P層其實就擁有了控制器的權利, 完全可以行使控制器的職責.

Controller又持有Presenter, 那么它只需要調用P層暴露出的接口, 就完全可以完成整個業務邏輯和頁面展示

關于C端和P端的循環引用的問題, 直接用weak關鍵字就可以解決了

利用代碼來說明一下問題:

這是一個Presenter的Protocol, 所有的P層的類都要遵循這個Protocol

#import /** 作為P : presenter 是管理 view viewController model這個三個中間人,負責UI刷新 視圖的交互總是和VC 關聯著的 */@protocol TGPresenterProtocol @optional// 處理View視圖相關操作 -- 協議的遵守者- (void)setView:(NSObject *)view;// 處理事件的相關響應- (void)setViewController:(UIViewController *)viewController;// 展示- (void)present;// 加載model - (void)presentWithModel:(id)model viewController:(UIViewController *)viewController;@end

可以看出, P層是可以拿到view或者viewController的, 并且可以在實現set方法的時候做一些事情. 這個稍后再講

另外, P層還可以展示數據, 直接展示數據, present方法, 利用模型展示數據, 利用presentWithModel:方法

比如, 在一個遵循了TGPresenterProtocol的Presenter類中

把需要管理的view傳遞給P,

- (instancetype)initWithTableView:(UITableView *)view{self = [super init]; if (!self) {return nil; } _view = view; _view.delegate = self; _view.dataSource = self; _view.separatorStyle = UITableViewCellSeparatorStyleNone; // 自適應高度 _view.rowHeight = UITableViewAutomaticDimension; _view.estimatedRowHeight = 100; return self;}- (void)setView:(UITableView *)view{ // 設置視圖 _view = view; _view.delegate = self; _view.dataSource = self; _view.separatorStyle = UITableViewCellSeparatorStyleNone; // 自適應高度 _view.rowHeight = UITableViewAutomaticDimension; _view.estimatedRowHeight = 100;}

比如上面的代碼, 將tableView的數據源和代理都給了P, 那么P就相當于行使了控制器的權力, 當P層拿到數據時(沒錯, P層是持有Model的):

- (void)loadHPData{NSString *dataPath = [[NSBundle mainBundle] pathForResource:@'testCellData' ofType:@'json']; NSData *jsonData = [NSData dataWithContentsOfFile:dataPath]; NSError *error; NSDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:&error]; if (error) {NSLog(@'error = %@',error.localizedDescription); } NSLog(@'dataDic = %@',dataDic); // model 要處理好數據的顯示格式 self.hpModel = [[CellSelfSizeModel alloc] initWithDic:dataDic]; // 刷新 [self present]; }

走Present方法, 實際就是tableView的reloadData:

- (void)present{[self.view reloadData];}

然后重走tableView的數據源方法. 將數據分發給cell去展示:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{return self.hpModel.data.listArray.count;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{NSString *ID = @''; cellType type;CelllSelfSizeListModel *newsList; if (indexPath.row > self.hpModel.data.listArray.count - 1) {newsList = nil; }else{newsList = self.hpModel.data.listArray[indexPath.row]; } if (newsList.orginImg.length>0) {// 有圖片type = NewsInListCellTypeHavePic; }else{// 無圖片type = NewsInListCellTypeOnlyWord; }ID = [NSString stringWithFormat:@'reusId%ld',(long)type];SelfSizeTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; if (cell == nil) {cell = [[SelfSizeTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID cellType:type]; }cell.cellModel = newsList;return cell;}

這樣就實現了Controller, View, Model的解耦. 給大家看看控制器做的事情:

- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view.self.title = @'MVP Demo';// 布局 [self initViews]; [self setUpConstraints];self.hpPresenter = [TGHPPresenter new]; // 視圖對象 self.hpPresenter.view = self.tableView; // 控制器對象 self.hpPresenter.viewController = self; // 外邊是要傳入參進去的 -- 數據模型 [self.hpPresenter loadHPData]; }

只需要初始化P層, 然后調P層的接口就可以了. 至于P層內部的邏輯, 我不需要知道

V層也只專注于視圖的創建

M層只專注于模型的構建(字典->模型)

這樣分層, 解耦的思想在程序設計中是極為重要的. 其實也可以看出MVP是對MVC模式的進一步抽象.

代碼Demo是我們老大寫的, 我只是分析了一波

來自:http://www.cocoachina.com/ios/20171106/21062.html

標簽: IOS
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
www成人在线视频| 91成人在线精品视频| 国产精品色婷婷在线观看| 伊人www22综合色| 黑丝一区二区| 亚洲综合三区| 国产女优一区| 丝袜美腿一区二区三区| 久久青草久久| 日韩亚洲在线| 乱人伦精品视频在线观看| 亚洲黄色影院| 视频一区在线视频| 亚洲另类av| 欧美精品国产一区| 亚洲综合五月| 日韩高清电影免费| 日本在线高清| 日韩午夜av在线| 欧美日韩亚洲一区在线观看| 精品日韩一区| 国产精品视区| 国产乱码精品一区二区三区亚洲人 | 国产精品午夜一区二区三区| 精品五月天堂| 亚洲精品午夜av福利久久蜜桃| 四虎在线精品| 亚洲涩涩在线| 日韩精品久久久久久| 国产欧洲在线| 日本亚洲视频| 日韩中文影院| 欧美日一区二区在线观看| 欧美成人基地| 久久国产精品免费精品3p| 婷婷精品在线| 国产一区2区在线观看| 日韩中文字幕区一区有砖一区 | 亚州精品视频| 在线视频观看日韩| 97久久超碰| 婷婷六月综合| 国产精品二区不卡| 日韩高清电影免费| 日韩一区二区免费看| 成人在线超碰| 日韩av网站在线观看| 久久久一二三| 日韩av免费大片| 91精品国产自产精品男人的天堂| 国产精品yjizz视频网| 久久激情综合网| 另类小说一区二区三区| 丝袜美腿亚洲色图| 亚洲色图国产| 国产九九精品| 97久久超碰| 日韩中文字幕视频网| 男人的天堂久久精品| 一区二区小说| 国产欧洲在线| 日韩精品水蜜桃| 欧美久久天堂| 蜜桃av.网站在线观看| 美女尤物国产一区| 青草国产精品| 国产欧美丝祙| 久久99免费视频| 成年男女免费视频网站不卡| 色偷偷偷在线视频播放| 在线日韩中文| 亚洲视频www| 日韩中文av| 精品三级在线观看视频| 狠狠躁少妇一区二区三区| 九色porny丨国产首页在线| 欧美日韩亚洲一区三区| 国产精品视频一区二区三区| 国产福利91精品一区二区| 99久久婷婷| 一区二区电影在线观看| 男女激情视频一区| 麻豆精品久久久| 久久精品亚洲人成影院| 欧美在线综合| 精品三级av在线导航| 激情视频一区二区三区| 免费人成精品欧美精品| 国产欧美一区二区色老头| 日韩不卡一区| 婷婷亚洲成人| 日韩在线不卡| 日韩一区二区免费看| 麻豆精品视频在线| 午夜宅男久久久| 大香伊人久久精品一区二区| 国产一级久久| 91亚洲国产成人久久精品| 视频一区免费在线观看| 亚洲精品亚洲人成在线观看| 日韩不卡手机在线v区| 久久三级中文| 另类专区亚洲| 蜜桃国内精品久久久久软件9| 蘑菇福利视频一区播放| 国产精品亚洲四区在线观看| 久久人人99| 首页欧美精品中文字幕| a天堂资源在线| 日韩三级久久| 久久影院一区| 成年男女免费视频网站不卡| 亚洲精品第一| 鲁鲁在线中文| 亚洲免费福利一区| 久久久久中文| 国产精品日本一区二区不卡视频| 国产亚洲毛片| 美女视频网站久久| 免费欧美在线视频| 最新亚洲激情| 日韩激情一区二区| 色综合www| 中文字幕在线视频久| 高潮久久久久久久久久久久久久| 免费久久精品视频| 精品久久免费| 亚洲一级大片| 亚洲国产综合在线看不卡| 国产精选一区| 午夜久久av| 性欧美xxxx免费岛国不卡电影| 精品中文在线| 久久精品午夜| 欧美日一区二区三区在线观看国产免 | 国产一区91| 美女少妇全过程你懂的久久| 亚洲一本视频| 特黄毛片在线观看| 国产一区清纯| 手机精品视频在线观看| 三级欧美在线一区| 激情91久久| 日韩av福利| 日本不卡免费高清视频在线| 青青草精品视频| 97成人在线| 国产欧美日韩一区二区三区在线| 国产美女视频一区二区| 亚洲三级观看| 国产精品porn| 福利视频一区| 免费一级欧美在线观看视频| 精品久久91| 精品国产乱码久久久久久樱花| 欧美日韩国产v| 秋霞国产精品| 日韩一级欧洲| 日韩毛片一区| 久久国产精品色av免费看| 综合激情在线| 国产农村妇女精品一区二区 | 麻豆视频观看网址久久| 国产精品mm| 日韩精品1区| 99精品视频在线| 国产亚洲精品v| 国产亚洲精品美女久久| 精品国产免费人成网站| 亚洲免费一区二区| 日韩欧美中文字幕电影| 美女视频黄久久| 久久亚洲国产| 日韩美女国产精品| 欧美激情麻豆| 日韩一区二区免费看| 国产三级一区| 91精品电影| 日韩区欧美区| 亚洲网址在线观看| 亚洲欧美日韩国产综合精品二区| 麻豆精品视频在线观看| 日本精品在线中文字幕| 色狠狠一区二区三区| 福利在线一区| 国产亚洲人成a在线v网站 | 国产精品一区2区3区| 久久国产影院| 久久不卡日韩美女| 日韩精品1区2区3区| 亚洲黄色在线| 国产一区二区三区亚洲| 亚州av日韩av| 97在线精品| 欧美日韩在线精品一区二区三区激情综合| 桃色av一区二区| 国产精品视频3p| 日本 国产 欧美色综合| 日韩视频二区| 日韩1区在线|