斯坦福iOS7公开课1-3笔记及纸牌Demo

1.MVC

Model:模型

描述程序是什么,例如数据库操作之类的行文以及纸牌Demo里纸牌玩法都是写在Model这一层,通过Notification和KVO(后续文章会介绍)两种方式与Controller通讯。

Controller:控制层

程序的逻辑在这里组织,Controller负责Model与View之间的沟通,因为Model与View老死不相往来。

当用户在页面进行操作后,Controller收集用户发出的交互信息,然后请教Model如何应对,Model收到Controller提出的问题,再给出答案(Controller不提出问题,
  Model永远不会主动回答)。Controller收集到Model给出的回应之后,再根据情况去更新UI页面。

当把UI控件与Controller联系起来时,Controller中会出现对应控件的outlet接口,通过它,Controller可以直接对UI控件进行通讯。

View:UI页面

程序运行后,用户看到的就是这一层,用户的交互信息可以通过delegate、dataSource和Target-Action三种方式与Controller进行通讯。

以纸牌Demo为例,右侧即程序运行后的页面,即View层,

左侧列表Model中一系列文件为Model层,定义了纸牌游戏的一系列玩法,如何玩。

CardgameViewController就是Controller层了,收集到页面点击的信息,找到Model里的方法,再去更新页面效果。

MVC的好处就在于代码分离,不仅使代码结构更清晰,也方便后续迭代更新,尤其是Controller中代码一多,可避免在Controller这一层与UI元素设置纠缠在一起。

如图,纸牌Demo中建立Model层以后,能够使代码更简洁清晰(注释掉的为分离Model前使用的部分代码)。

2.h文件和.m文件

Objective-c中.h文件主要用来声明公共接口,包括声明类及其方法。.m文件则负责具体实现,也可以在这定义不想暴露出去的私有接口。

引入头文件时会看到两种写法,引用系统自带的一般用#import
<XX.h>,引用自定义的一般用#import
"XX.h",区别在于""表示从当前项目路径开始寻找文件,如果找不到,则到项目中配置的头文件路径去找。<>表示直接到项目配置的头文件路径去找。

[email protected]、nonatomic、strong 

在代码中会看到这几个关键词,使用@property声明变量后,Xcode4.5及之后的版本中编译器会自动生成setter和getter方法,如果不是特殊需要,可以直接使用下划线加变量名(“_name”)进行赋值取值操作。

atomic是为了防止多线程操作时同时读取数据的一种保护机制,会占用一些资源,一般在单线程中使用nonatomic即可。

strong、weak代表强弱引用(arc环境下使用,Xcode5以后默认为arc环境),使用strong申明变量为强引用类型时,意味着只要有一个指针指向该变量,它就会一直存在内存中,除非所有指向它的指针都指向其他地方或变为nil或者显式给该变量赋值为nil,它才会销毁。

使用weak则不同,比如ViewController中可以发现UI控件一般都是weak类型,编译器会自动追踪到谁拥有这个弱引用变量,当拥有者销毁时, 变量自动被赋值为nil,即View销毁后,其所属的UI控件也为nil了。

4.iOS7新特性
instancetype 

课程中建议init方法使用instancetype代替id,当返回值与消息接收者类型一致时就可以用instancetype,能够让编译器自动做一些检查工作,在我们写代码编译阶段就能自动检查返回值类型是否合法,但instancetype不能像id一样作为参数使用,暂不深入研究,有兴趣可以参考

http://blog.eddie.com.tw/2013/12/16/id-and-instancetype/

5.课程中用到的纸牌Demo最终效果,源码见附件:http://files.cnblogs.com/colinhou/Matchismo.zip

时间: 2024-10-15 06:02:29

斯坦福iOS7公开课1-3笔记及纸牌Demo的相关文章

斯坦福iOS7公开课10笔记及演示Demo

这一节主要介绍了多线程中的串行队列以及滚动视图UIScrollView. 一 .多线程 这一节只是简单介绍了多线程的串行队列,即把任务加入线程队列后按顺序逐步执行. (1)目前iOS多线程提供的方法主要是GCD和NSOperation,前者是C语言级别的,后者是经过封装,更具有面向对象特性的API. (2)UI交互操作都是在主线程进行,所以为了保证交互过程的流程舒适,类似于下载等耗时操作就需要主线程外执行,否则将出现用户无法对手机进行操作的场景. 这时通过多线程,就可以使下载图片等耗时操作单独进

斯坦福iOS7公开课4-6笔记及演示Demo

1.变量类型别滥用id,如果不仔细容易在程序执行时引发错误,因为在编译阶段编译器只是检测变量对象所属类型,尤其是类型为id时代表任何类型都可以通过检查,但不会检测变量对象调用的方法,这样当对象所属类不包含所写的调用方法时,编译通过,但在程序运行时才会报错. 2.简单介绍了框架自带的集合.字体等. 3.通过使用NSAttributedString可以让屏幕显示的字体样式更丰富,设置各种样式等,详细参见附件的演示Demo:http://files.cnblogs.com/colinhou/Attri

斯坦福iOS7公开课7-9笔记及演示Demo

这一部分主要介绍了iOS的绘图.手势.协议.block.力学特效动画(包括重力.碰撞.吸附等)以及自动布局的内容.    一.绘图.手势 (1)调用一个自定义的UIView时,可以使用awakeFromNib方法做一些初始化工作. (2)iOS中绘图需要了解的常用测量单位: CGFloat:浮点值,与float一样: CGPoint.CGSize.CGRect是三个结构体分别代表游XY坐标描述的店.宽度高度描述的大小值以及由原点坐标.宽度高度描述的矩形,度量单位都是CGFloat. (3)自定义

斯坦福iOS7公开课11笔记及演示Demo&amp;&amp;访问HTTPS连接下载数据

这一节主要介绍UITableView以及iPad,Demo为从Flicker下载图片并显示,但是实际过程中发现需要FQ并使用HTTPS连接,所以这次用了两个Demo,一个是课程中的Demo,另一个是简化的. 最后调试过程中还找到Xcode中观察变量的一个小技巧.     一.UITableView UITableView是iOS中最常用的表视图,通讯录中的联系人.手机设置里的每一个选项都是表视图中的一个单元格cell,微信.微博每一条记录其实也是一个cell,只不过是组成要素更多一些而已. (1

斯坦福iOS7公开课11笔记及演示Demo&amp;访问HTTPS链接下载数据

这一节主要介绍UITableView以及iPad,Demo为从Flicker下载图片并显示,但是实际过程中发现需要FQ并使用HTTPS连接,所以这次用了两个Demo,一个是课程中的Demo,另一个是简化的. 最后调试过程中还找到Xcode中观察变量的一个小技巧.     一.UITableView UITableView是iOS中最常用的表视图,通讯录中的联系人.手机设置里的每一个选项都是表视图中的一个单元格cell,微信.微博每一条记录其实也是一个cell,只不过是组成要素更多一些而已. (1

斯坦福ML公开课笔记13B-因子分析模型及其EM求解

转载请注明:http://blog.csdn.net/stdcoutzyx/article/details/37559995 本文是<斯坦福ML公开课笔记13A>的续篇.主要讲述针对混合高斯模型的问题所采取的简单解决方法,即对假设进行限制的简单方法,最后引出因子分析模型(Factor Analysis Model),包括因子分析模型的介绍.EM求解等. 斯坦福ML公开课笔记13B-因子分析模型及其EM求解,布布扣,bubuko.com

斯坦福机器学习公开课学习笔记(1)—机器学习的动机与应用

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 斯坦福机器学习公开课差不多是网上能找到的最好的机器学习入门课程了.现在一共有20节课放到网络上,博主是在网易公开课学的,那里的视频有中文字幕然后课件也很全. (地址:http://v.163.com/special/opencourse/machinelearning.html) 主讲师Andrew Ng(已经被百度诏安了)是华裔科学家,看他的课特别有亲切感.感觉他们的课跟国内老师的课区别还是挺大的

斯坦福大学公开课:iOS 7应用开发 笔记

2015-07-06 第一讲   课务.iOS概述 -------------------------------------------------- 开始学习斯坦福大学公开课:iOS 7应用开发留下笔记

斯坦福ML公开课笔记14——主成分分析

上一篇笔记中,介绍了因子分析模型,因子分析模型使用d维子空间的隐含变量z来拟合训练数据,所以实际上因子分析模型是一种数据降维的方法,它基于一个概率模型,使用EM算法来估计参数. 本篇主要介绍PCA(Principal Components Analysis, 主成分分析),也是一种降维方法,但是该方法比较直接,只需计算特征向量就可以进行降维了.本篇对应的视频是公开课的第14个视频,该视频的前半部分为因子分析模型的EM求解,已写入笔记13,本篇只是后半部分的笔记,所以内容较少. 斯坦福ML公开课笔