斯坦福大学iOS开发公开课总结(一):iOS的MVC框架

写在开头


入职iOS开发也有半年了,一直没有积极更新技术博客,感到甚是惭愧。虽然这期斯坦福公开课内容相对基础一些,但是笔者还是想把每一课的内容都总结一下然后分享出去,也算是对自己的锻炼以及对这一经典的课程致敬吧。

课程地址:斯坦福大学公开课:iOS 7应用开发

废话少说,开始!

MVC架构介绍


基本概念:

  • 视图(View):构建UI的类;例如:按钮,标签,进度条等。
  • 模型(Model):视图类所需要的数据;例如:表格需要显示的文字。
  • 控制器(Controller):连接视图类和模型类,任务是使数据显示在屏幕上。例如:控制器将表格需要使用的数据“填入”表格视图中,将表格视图显示出来。

通信方式

  • 控制器可以直接访问模型:将模型直接作为控制器的属性。
  • 控制器可以直接访问视图:将视图直接作为控制器的属性。
  • 模型与视图无法直接访问对方:二者完全解耦,不能引用对方,把对方设置为属性。

  • 视图到控制器的通信

    1. 目标动作机制(target - action):用户与视图交互触发控制器的方法。例如:点击按钮后实现视界面跳转,网络请求,刷新UI等。

    2. 委托机制(delegate):视图向控制器询问某些自己无法决定的事情,或是让控制器帮助自己做一些自己独立无法完成的事情。 因为控制器才是掌握全局的角色,很多时候视图是无法自己做决定的。例如:表格问控制器:我可以滚动么?然后控制器给予回答告知是否可以继续滚动。 如果表格的高度很小,那么就可以不让它滚动。但是如果表格的高度已经超过了屏幕的高度,这时候如果让它自作主张无法滚动久不好了。

    3. 数据源机制(dataSource):视图让控制器给它将要显示的数据。例如:音乐的数据存在于模型里,控制器访问模型,从模型里拿到数据后告诉视图如何显示出歌曲。
  • 模型到控制器的通信

    1. 广播机制(Notification):控制器注册监听某模型数据变化的广播频道,当此模型数据变化后向该控制器发送广播,告知模型变化情况。
    2. KVO机制(Key-Value Observing):模型作为控制器的属性,当模型属性被修改后,持有此模型属性的控制器就会收到通知。

下面一张图可以直观看出上述的通信方式。图片来自本课程配套的课件
iOS MVC架构

其他知识


类文件类型:

  • .h文件(头文件):公开API,其他类可以调用的方法,告诉其他类“我能做些什么:what I can do
  • .m文件(实现文件):非公开API,如何实现.h文件的方法,查看实现文件可以知道该类具体是如何实现公开API的方法的:how to do

属性

  • strong:在堆中保持这个所指的东西,至少有一个强指针指向它,否则就会释放。
  • weak:如果没有强指针指向它,清理指向的内存后,会被设置成nil指针。
  • nonatomic:不能有两个线程同时设置该属性。

零散知识

  • 所有对象都在堆里,OC会为我们管理这些内存。
  • 访问实例变量,就是访问对象的实例数据。
  • OC里,可以先实现方法再声明。

结语


第一讲里的内容比较基础,重点是介绍了MVC模型的通信机制,需要反复推敲并且在实际操作中严格遵守。因为只有这样做才能降低类之间的耦合性,写出易于维护和扩展的代码。

比如在模型类里是不能调用控制器的方法的,模型类只能被控制器调用并且当所拥有的数据改变后通知使用自己的控制器数据的改变。更不能直接给视图通知让视图自己更新UI。

————————————————- 2018年7月17日更新 ————————————————-

注意注意!!!

笔者在近期开通了个人公众号,主要分享编程,读书笔记,思考类的文章。

  • 编程类文章:包括笔者以前发布的精选技术文章,以及后续发布的技术文章(以原创为主),并且逐渐脱离 iOS 的内容,将侧重点会转移到提高编程能力的方向上。
  • 读书笔记类文章:分享编程类思考类心理类职场类书籍的读书笔记。
  • 思考类文章:分享笔者平时在技术上生活上的思考。

因为公众号每天发布的消息数有限制,所以到目前为止还没有将所有过去的精选文章都发布在公众号上,后续会逐步发布的。

而且因为各大博客平台的各种限制,后面还会在公众号上发布一些短小精干,以小见大的干货文章哦~

扫下方的公众号二维码并点击关注,期待与您的共同成长~

公众号:程序员维他命

坚持原创技术分享,您的支持将鼓励我继续创作!