您的位置:首页 > 移动开发 > IOS开发

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

2016-06-21 17:06 453 查看

写在开头

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

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

废话少说,开始!

MVC架构介绍

基本概念:

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

通信方式

控制器可以直接访问模型:将模型直接作为控制器的属性。
控制器可以直接访问视图:将视图直接作为控制器的属性。

模型与视图无法直接访问对方:二者完全解耦,不能引用对方,把对方设置为属性。

视图到控制器的通信

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

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

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

模型到控制器的通信

广播机制(Notification):控制器注册监听某模型数据变化的广播频道,当此模型数据变化后向该控制器发送广播,告知模型变化情况。
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。

文/Hero_SJ(简书作者)

原文链接:http://www.jianshu.com/p/eb58ab21080a

著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息