zoukankan      html  css  js  c++  java
  • iOS的基本设计模式

    在iOS中有一些基本的设计模式:

    • delegation
    • protocol
    • model-vew-controller
    • target-action
    • notification
    • declared properties

    下面分别介绍一下各个设计模式的用途。

    Delegation(代理)

    摘自:http://developer.apple.com/library/ios/#documentation/General/Conceptual/DevPedia-CocoaCore/Delegation.html

    这是Apple的权威解释。

    delegation,委托模式(另外有个常用的proxy模式,二者的区别是代理模式一般要更严格,实现相同的接口,委托只是引用被委托对象),是简单的强大的模式,可让一个对象扮演另外对象的行为。委托对象保持到另外对象的引用,并在适当的时候发消息给另外对象。委托对象可以在发送消息的时候做一些额外的事情。

    在cocoa框架中的委托模式,委托对象往往是框架中的对象,被委托对象是自定义的controller对象。委托对象保持一个到被委托对象的弱引用。

    在该文档中所举的例子是mac下开发的示例。

    image

    这里被委托对象是NSWindow类的一个实例,该类声明了协议(protocol),其中有个方法是windowShouldClose,当用户点击窗口的关闭按钮的时候,窗口对象将发送windowShouldClose消息给代理对象(windowDelegate),询问是否确认关闭窗口。代理对象返回一个bool值,因此控制了窗口对象的行为。

    在iOS中也有类似的示例,在创建的项目中,classes目录中会有xxAppDelegate,这就是委托类。在该委托类实例中,引用了UIWindow和Controller。可以类似上面mac示例控制被引用对象的行为。

    当一个类它的行为产生了不一致的时候,那么这个类要借助于Delegate来实现它想实现的功能。在iPhone中比较常见的是UIApplicationDelegate。

    Protocol(协议)

    可以认为是java中的接口(interface)。在iOS中有两种protocol:

    • 正式的protocol:通过@interface声明,要求子类实现方法,可以强制实现(@required)或者可选(@optional),正式的protocol是对objc语言的扩展;
    • 非正式的protocol是NSObject的一个category,category是objc语言的一个特性,可以让你为一个类增加方法而不需要实现子类。非正式protocol实现方法是可选的。在可选的protocol方法未引入objc 2.0以前,非正式的protocol是在foundation和appkit类中实现委托的基本方式

    Model-View-Controller(模型视图控制器)

    MVC设计模式大家应该很熟悉了,不多说了。

    image

    Target-Action(目标行为)

    摘自:http://developer.apple.com/library/ios/#documentation/general/conceptual/Devpedia-CocoaApp/TargetAction.html

    target-action是个设计模式。对象保持必要的信息,当事件发生的时候发送消息给其他对象。所保持的信息有两部分数据组成:

    • action selector,定义要调用的方法名称标识;
    • target,接收消息的对象。

    当被称作action message的事件发生,将向target发送action selector定义的方法消息。

    target-action模式一般用于自定义的controller按照应用规范定义的方式处理action message。

    image

    Notification(消息中心)

    一个notification,即一个通知,是一个消息,是用于通知一到多个观察者对象程序当前有一个事件发生。这里,接收通知的一方叫观察者,observer。实际上是观察者模式。

    这里,发送通知的对象,并不知道谁会收到这个通知。这样通知者和观察者之间松散耦合。

    image

    Declared property(属性)

    字面意思是声明的属性。比如:

    @property (<#attributes#>) <#type#> <#name#>;

    例如:

    @property (nonatomic, copy) NSString *name;

    是增强Objective-C语法,在Objective-C 2.0中才开始引入。

    转自:http://marshal.easymorse.com/archives/3296

  • 相关阅读:
    wordPress屏蔽中国境内的IP
    中国IP地址大全
    WebGL之点精灵的旋转(Rotation Sprite)
    WebGL之点上添加图片(using texture on point)
    potree--加载二进制格式文件
    potree--如何控制八叉树子节点的显示?
    重启tomcat后,访问登陆接口响应慢--Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [27,572] milliseconds.
    Unirest
    配置规范
    函数编写建议
  • 原文地址:https://www.cnblogs.com/greywolf/p/2815605.html
Copyright © 2011-2022 走看看