• 斯坦福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

       

  • 相关阅读:
    【POJ2176】Folding
    【NOIP2018】赛道修建
    优雅的文本编辑器——Sublime Text 3的搭建与使用
    【NOIP2010】乌龟棋
    【POJ3585】Accumulation Degree
    【POJ3322】Bloxorz I
    python之路_常用模块介绍
    python之路_正则表达式及re模块
    python之路_内置函数及匿名函数
    python之路_递归函数及实例讲解
  • 原文地址:https://www.cnblogs.com/colinhou/p/3734716.html
Copyright © 2020-2023  润新知