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的更多相关文章

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

    这一节主要介绍UITableView以及iPad,Demo为从Flicker下载图片并显示,但是实际过程中发现需要FQ并使用HTTPS连接,所以这次用了两个Demo,一个是课程中的Demo,另一个是简 ...

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

    这一节主要介绍了多线程中的串行队列以及滚动视图UIScrollView. 1 .多线程 这一节只是简单介绍了多线程的串行队列,即把任务加入线程队列后按顺序逐步执行. (1)目前iOS多线程提供的方法主 ...

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

    这一部分主要介绍了iOS的绘图.手势.协议.block.力学特效动画(包括重力.碰撞.吸附等)以及自动布局的内容. 1.绘图.手势 (1)调用一个自定义的UIView时,可以使用awakeFromNi ...

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

    1.变量类型别滥用id,如果不仔细容易在程序执行时引发错误,因为在编译阶段编译器只是检测变量对象所属类型,尤其是类型为id时代表任何类型都可以通过检查,但不会检测变量对象调用的方法,这样当对象所属类不 ...

  5. 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记1 IOS8概述

    首先感谢网易公开课和SwiftV课堂的朋友们辛苦翻译,这个系列是我学习斯坦福IOS8公开课的个人心得体会和笔记,希望能给大家带来启发. 首先我们要知道IOS系统中的结构情况,从贴近硬件的底层到贴近用户 ...

  6. 斯坦福ML公开课笔记15—隐含语义索引、神秘值分解、独立成分分析

    斯坦福ML公开课笔记15 我们在上一篇笔记中讲到了PCA(主成分分析). PCA是一种直接的降维方法.通过求解特征值与特征向量,并选取特征值较大的一些特征向量来达到降维的效果. 本文继续PCA的话题, ...

  7. [置顶] 生成学习算法、高斯判别分析、朴素贝叶斯、Laplace平滑——斯坦福ML公开课笔记5

    转载请注明:http://blog.csdn.net/xinzhangyanxiang/article/details/9285001 该系列笔记1-5pdf下载请猛击这里. 本篇博客为斯坦福ML公开 ...

  8. [置顶] NB多项式事件模型、神经网络、SVM之函数/几何间隔——斯坦福ML公开课笔记6

    转载请注明:http://blog.csdn.net/xinzhangyanxiang/article/details/9722701 本篇笔记针对斯坦福ML公开课的第6个视频,主要内容包括朴素贝叶斯 ...

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

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

随机推荐

  1. codeforces C. Diverse Permutation(构造)

    题意:1...n 的全排列中 p1, p2, p3....pn中,找到至少有k个 |p1-p2| , |p2-p3|, ...|pn-1 - pn| 互不相同的元素! 思路: 保证相邻的两个数的差值的 ...

  2. Hadoop入门进阶课程5--MapReduce原理及操作

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan  ...

  3. Android 学习笔记之AndBase框架学习(五) 数据库ORM..注解,数据库对象映射...

    PS:好久没写博客了... 学习内容: 1.DAO介绍,通用DAO的简单调度过程.. 2.数据库映射关系... 3.使用泛型+反射+注解封装通用DAO.. 4.使用AndBase框架实现对DAO的调用 ...

  4. JS 对象属性相关--检查属性、枚举属性等

    1.删除属性 delete运算符可以删除对象的属性 delete person.age //即person不再有属性age delete person['age'] //或者这样 delete只是断开 ...

  5. android 获取当前位置

    1. Android开发位置感知应用程序方式:1. GPS 定位     精确度高,仅适用于户外,严重消耗电量.如果手机内置GPS接受模块,即使手机处于信号盲区,依然可以获取位置信息. 2. NETW ...

  6. 如何快速开发树形列表和分页查询整合的WInform程序界面

    我在做Winform界面的时候,一般都是统一化处理,界面顶部放置一些字段条件供查询,下面就是分页查询列表,展示相关的数据.但有时候碰到一些表字段内容分类比较多,有一些特别重要,如果放在一个树形列表来进 ...

  7. PHP实现过滤各种HTML标签

    首先分享一些比较常见的 $str=preg_replace("/<s*imgs+[^>]*?srcs*=s*(''|")(.*?)\1[^>]*?/?s*> ...

  8. c#图片添加水印

    今天讲一个上传图片添加水印的方法,直接上代码吧 protected void Button1_Click(object sender, EventArgs e)    {        int loc ...

  9. 百度地图刷新显示不完整?(应该是和div顺序有关系)

    解决方案:1异步加载(jquery(function(){loadJScript():}))   2解析加载设置了个延迟(setTimeOut(getInit,1000))

  10. Asp.Net 配置IISExpress允许外部访问

    1.找到IISExpress的配置文件,或位于(文档/IISExpress/config)文件夹下,打开applicationhost.config,找到如下代码:<site name=&quo ...