当前位置: 首页 > news >正文

网站数据比较/聊城网站推广的公司

网站数据比较,聊城网站推广的公司,做二手车的网站有哪些,深圳宝安网站建设工iOS中的MVC(Model-View-Controller)将软件系统分为Model、View、Controller三部分Model: 你的应用本质上是什么(但不是它的展示方式)Controller:你的Model怎样展示给用户(UI逻辑)View&#xff1…
iOS中的MVC(Model-View-Controller)将软件系统分为Model、View、Controller三部分

技术分享

Model: 你的应用本质上是什么(但不是它的展示方式)
Controller:你的Model怎样展示给用户(UI逻辑)
View:用户看到的,被Controller操纵着的

Controller可以直接访问Model,也可以直接控制View。
但Model和View不能互相通信。

View可以通过action-target的方式访问Controller,比如我们在StoryBoard中拖UIButton到代码中所创建的@IBAction,当按钮被点击时,View就会传递该信息给Controller。
有时候Controller需要实时监控View的状态,这时Controller会通过protocol将其自身设为View的delegate,这样当View will change、should change、did change 的时候Controller也会接到相应通知。
View不存储数据,但View可以通过协议获取Controller而不是Model中的数据用来展示。
Controller整理Model中的数据用于给View展示。

Model不能直接与Controller通讯,因为Model是独立于UI存在的。
但当Model发生改变想通知Controller时可使用广播机制,在iOS中有NSNotification和KVO(Key-value observing)可供使用。

NSNotification:

        let center = NSNotificationCenter.defaultCenter()
        
        center.
addObserverForName(UIContentSizeCategoryDidChangeNotification,
            object: 
UIApplication.sharedApplication(),
            queue: 
NSOperationQueue.mainQueue())
            { notification 
in
                
let c = notification.userInfo?[UIContentSizeCategoryNewValueKey]
        }

UIContentSizeCategoryDidChangeNotification以及UIContentSizeCategoryNewValueKey均为系统中定义好的String

KVO:

在ViewDidLoad中:
     webView.addObserver(self, forKeyPath: "estimatedProgress", options: .New, context: nil)

     override func observeValueForKeyPath(keyPath: String?, ofObject object:AnyObject?, change: [NSObject : AnyObject]?, context:UnsafeMutablePointer<Void>) {
             if (keyPath == "estimatedProgress") {
                 progressView.hidden = webView.estimatedProgress == 1
                 progressView.setProgress(Float(webView.estimatedProgress), animated: true)
             }
         }

MVP模式从经典的MVC模式演变而来,将Controller替换成Presenter,依据MVP百度百科中的解释,MVP的优点相比较于MVC是完全分离Model与View,Model与View的信息传递只能通过Controller/Presenter,我查阅资料发现在其他平台上的MVC模式View与Model能否直接通讯有着不同的说法,但在iOS开发中,Apple是这么说的。在MVC下,所有的对象被归类为一个model,一个view,或一个controller。Model持有数据,View显示与用户交互的界面,而View Controller调解Model和View之间的交互,在iOS开发中我按照Model与View无法相互通讯来理解。

MVVM(Model View View-Model

技术分享

上图展示了MVVM与MVC的差别。

在MVC模式的iOS开发中,Controller承担了太多的代码,包含着我们的视图处理逻辑和业务逻辑。

技术分享

在MVVM中,我们将视图处理逻辑从C中剥离出来给V,剩下的业务逻辑部分被称做View-Model。
使用MVVM模式的iOS应用的可测试性要好于MVC,因为ViewModel中并不包含对View的更新,相比于MVC,减轻了Controller的负担,使功能划分更加合理。

MVVM模式的正确实践是,我们应该为app delegate的根视图创建一个ViewModel,当我们要生成或展示另一个次级ViewController时,采用当前的ViewModel为其创建一个子ViewModel。
技术分享
而这些ViewModel的代码并不放在ViewController中,我们的View请求自己的ViewModel来获取所需的数据,ViewController完全归于View。

版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS开发中MVC、MVVM模式详解

标签:mvc   mvvm   kvo   nsnotification   

原文:http://blog.csdn.net/nsnirvana/article/details/46896173

http://www.jmfq.cn/news/5205205.html

相关文章:

  • 水果网站系统的建设与实现/微信引流主动被加软件
  • 建网站要多少钱 优帮云/百度学术论文查重官网
  • web网站开发主流框架/搜狗网站收录
  • 微视频网站源码/南昌seo实用技巧
  • 网站建设帐号/分享推广
  • 网站 域名空间 调试/成品网站源码在线看
  • 一个简单的游戏网站建设/定制网站+域名+企业邮箱
  • 网站建设服务器端软件/网络广告推广方案
  • 濮阳网络教育/台州百度推广优化
  • 网站网站地图怎么做/怎么建立信息网站平台
  • 湖南在线/网站建设seo优化培训
  • 做网站建设销售/郑州疫情最新情况
  • 宁波做百度网站/windows优化大师怎么彻底删除
  • 乐清网站制作/外链发布工具下载
  • 网站结构怎么分析/电子商务说白了就是干什么的
  • 在凡科做的网站怎么推广/企业网站搜索优化网络推广
  • 如何搭建公司内部网站/搜索引擎优化工具有哪些
  • 深圳专业做网站电话/百度打广告多少钱
  • 学校门户网站建设方案/湖南长沙疫情最新情况
  • 做APP必须要有网站么/seo海外推广
  • 哈尔滨专业网站制作设计/shopify seo
  • 网站备案可以强制撤销吗/百度投放广告流程
  • 网站设计培训成都/亚马逊alexa
  • 外贸做的社交网站/关键词排名点击
  • 自己做的网站如何联网/百度竞价推广课程
  • 上的网站app/百度推广工具
  • 企业管理软件销售好做吗/网站是怎么优化推广的
  • 网站域名在哪里注册/百度关键词搜索趋势
  • xsl做书店网站/永久开源的免费建站系统
  • 网站建设论文伯乐在线/代写文案的软件