斯坦福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",区别在于""表示从当前项目路径开始寻找文件,如果找不到,则到项目中配置的头文件路径去找。<>表示直接到项目配置的头文件路径去找。
3.@property、nonatomic、strong
在代码中会看到这几个关键词,使用@property声明变量后,Xcode4.5及之后的版本中编译器会自动生成setter和getter方法,如果不是特殊需要,可以直接使用下划线加变量名(“_name”)进行赋值取值操作。
atomic是为了防止多线程操作时同时读取数据的一种保护机制,会占用一些资源,一般在单线程中使用nonatomic即可。
strong、weak代表强弱引用(arc环境下使用,Xcode5以后默认为arc环境)。
使用strong申明变量为强引用类型时,意味着变量是对象的拥有者,除非将该变量(Objective-C中所有变量都是指针)赋值为nil或者指向其他对象,不然该对象会一直存在内存中,即对象只要有至少一个拥有者(strong变量)时,就不会被销毁。
需要注意的是,Xcode中,不指明strong或weak时,默认为strong,但即使是strong,@property中一般也会指明strong,这是一种约定俗成习惯,虽然不写也没错。
使用weak则不同,意味着该变量不是对象的拥有者。比如在ViewController中可以发现UI控件一般都是weak类型,当View这个拥有者销毁后,UI控件就没有拥有者了,自动被赋值为nil,即View销毁后,其所属的UI控件也不存在了。

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

斯坦福iOS7公开课1-3笔记及纸牌Demo的更多相关文章
- 斯坦福iOS7公开课11笔记及演示Demo&访问HTTPS链接下载数据
这一节主要介绍UITableView以及iPad,Demo为从Flicker下载图片并显示,但是实际过程中发现需要FQ并使用HTTPS连接,所以这次用了两个Demo,一个是课程中的Demo,另一个是简 ...
- 斯坦福iOS7公开课10笔记及演示Demo
这一节主要介绍了多线程中的串行队列以及滚动视图UIScrollView. 1 .多线程 这一节只是简单介绍了多线程的串行队列,即把任务加入线程队列后按顺序逐步执行. (1)目前iOS多线程提供的方法主 ...
- 斯坦福iOS7公开课7-9笔记及演示Demo
这一部分主要介绍了iOS的绘图.手势.协议.block.力学特效动画(包括重力.碰撞.吸附等)以及自动布局的内容. 1.绘图.手势 (1)调用一个自定义的UIView时,可以使用awakeFromNi ...
- 斯坦福iOS7公开课4-6笔记及演示Demo
1.变量类型别滥用id,如果不仔细容易在程序执行时引发错误,因为在编译阶段编译器只是检测变量对象所属类型,尤其是类型为id时代表任何类型都可以通过检查,但不会检测变量对象调用的方法,这样当对象所属类不 ...
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记1 IOS8概述
首先感谢网易公开课和SwiftV课堂的朋友们辛苦翻译,这个系列是我学习斯坦福IOS8公开课的个人心得体会和笔记,希望能给大家带来启发. 首先我们要知道IOS系统中的结构情况,从贴近硬件的底层到贴近用户 ...
- 斯坦福ML公开课笔记15—隐含语义索引、神秘值分解、独立成分分析
斯坦福ML公开课笔记15 我们在上一篇笔记中讲到了PCA(主成分分析). PCA是一种直接的降维方法.通过求解特征值与特征向量,并选取特征值较大的一些特征向量来达到降维的效果. 本文继续PCA的话题, ...
- [置顶] 生成学习算法、高斯判别分析、朴素贝叶斯、Laplace平滑——斯坦福ML公开课笔记5
转载请注明:http://blog.csdn.net/xinzhangyanxiang/article/details/9285001 该系列笔记1-5pdf下载请猛击这里. 本篇博客为斯坦福ML公开 ...
- [置顶] NB多项式事件模型、神经网络、SVM之函数/几何间隔——斯坦福ML公开课笔记6
转载请注明:http://blog.csdn.net/xinzhangyanxiang/article/details/9722701 本篇笔记针对斯坦福ML公开课的第6个视频,主要内容包括朴素贝叶斯 ...
- 斯坦福大学公开课:iOS 7应用开发 笔记
2015-07-06 第一讲 课务.iOS概述 -------------------------------------------------- 开始学习斯坦福大学公开课:iOS 7应用开发留 ...
随机推荐
- jQuery+Ajax滚屏异步加载数据实现(附源码)
一.CSS样式 body { font:12px/1.0em Microsoft Yahei; line-height:1.6em; background:#fff; line-height:1.2e ...
- Java 常用字符串操作总结
1. String转ASCII码 public static String stringToAscii(String value) { StringBuffer sbu = new StringBuf ...
- 使用WinDbg调试SQL Server查询
上一篇文章我给你介绍了WinDbg的入门,还有你如何能附加到SQL Server.今天的文章,我们继续往前一步,我会向你展示使用WinDbg调试SQL Server查询需要的步骤.听起来很有意思?我们 ...
- 在Asp.Net MVC中使用ModelBinding构造Array、List、Collection以及Dictionary
在asp.net mvc中,我们可以在html表单中使用特定的格式传递参数,从而通过model binder构造一些集合类型. 第一种方式 public ActionResult Infancy(Pe ...
- mysql修改definer方法
-- 函数.存储过程 select definer from mysql.proc; update mysql.proc set definer='billing@%'; -- 定时事件 sele ...
- C#开发的高性能EXCEL导入、导出工具DataPie(支持MSSQL、ORACLE、ACCESS,附源码下载地址)[转]
转自:http://www.cnblogs.com/yfl8910/archive/2012/05/19/2509194.html 作为财务数据核算人员,面对大量的业务与财务数据,借助于传统的EXCE ...
- C#调用windows api示例
这是运行结果: Api函数是构筑Windws应用程序的基石,每一种Windows应用程序开发工具,它提 供的底层函数都间接或直接地调用了Windows API函数,同时为了实现功能扩 展,一般也都提供 ...
- TreeBuilder科学的树创建器
public static class TreeBuilder { public static List<dynamic> Build(IEnumerable<dynamic> ...
- 变废为宝,将Discuz废弃的cache机制引入到memory体系中
Discuz的source/class/cache目录,代表着相应的缓存机制,但实际上废弃很多年了. Discuz用Memory代表了缓存,里面内置了memcache等多种缓存驱动. 但很多人的开发环 ...
- 【转载】NodeJS、NPM安装配置步骤(windows版本)
1.windows下的NodeJS安装是比较方便的(v0.6.0版本之后,支持windows native),只需要登陆官网(http://nodejs.org/),便可以看到首页的“INSTALL” ...