斯坦福iOS7公开课1-3笔记及纸牌Demo_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > 斯坦福iOS7公开课1-3笔记及纸牌Demo

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

 2014/5/18 13:24:27  colinhou  博客园  我要评论(0)
  • 摘要:1.MVCModel:模型描述程序是什么,例如数据库操作之类的行文以及纸牌Demo里纸牌玩法都是写在Model这一层,通过Notification和KVO(后续文章会介绍)两种方式与Controller通讯。Controller:控制层程序的逻辑在这里组织,Controller负责Model与View之间的沟通,因为Model与View老死不相往来。当用户在页面进行操作后,Controller收集用户发出的交互信息,然后请教Model如何应对,Model收到Controller提出的问题
  • 标签:笔记 iOS

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申明变量为强引用类型时,意味着只要有一个指针指向该变量,它就会一直存在内存中,除非所有指向它的指针都指向其他地方或变为nil或者显式给该变量赋值为nil,它才会销毁。

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

    

4.iOS7新特性 instancetype 

   课程中建议init方法使用instancetype代替id,当返回值与消息接收者类型一致时就可以用instancetype,使用instancetype还能够让编译器自动做一些检查工作,暂不深入研究,有兴趣可以参考 http://blog.eddie.com.tw/2013/12/16/id-and-instancetype/

   

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

   

 

发表评论
用户名: 匿名