zoukankan      html  css  js  c++  java
  • Objective-c 单例设计模式

    Objective-c 单例设计模式

    一、什么是单例模式:(Singleton)
         单例模式的意图是是的类的对象成为系统中唯一的实例,提供一个访问点,供客户类共享资源。
     
    二、什么情况下使用单例?
         1、类只能有一个实例,而且必须从一个为人熟知的访问点对其进行访问,比如工厂方法。
         2、这个唯一的实例只能通过子类化进行扩展,而且扩展的对象不会破坏客户端代码。
     

    三、单例设计模式的要点:(1) 某个类只能有一个实例。  (2)他必须自行创建这个对象  (3)必须自行向整个系统提供这个实例; (4)为了保证实例的唯一性,我们必须将 -(id)copyWithZone:(NSZone *)zone  、+(id)allocWithZone:(NSZone *)zone、 -(id)retain、  -(NSUInteger)retainCount 、-(oneway void)release

     、-(id)autorelease  的实现方法进行覆盖。(具体实现请看程序)  (5)这个方法必须是一个静态类
     
    四、在OC中实现单例模式:
         先创建一个单例类,即:
        #import <Foundation/Foundation.h>

        @interface Bee : NSObject<NSCopying>//注意此处调用了NScoping协议

        +(Bee *)shareIsrance;//此处定义了一个工厂方法,用工厂方法来限制实例化过程(下文中将会提到)

         @end    //调用NScoping协议,从而在实现文件中覆盖

       

       在实现文件中实现如下:

    #import "Bee.h"

    @implementation Bee

    static Bee  *sharesingleton=nil;//必须声明为一个静态方法

    +(Bee *)shareIstance

    {

        if (sharesingleton == nil) {//检查唯一实例是否创建

            sharesingleton = [[super allocWithZone:NULL] init ];

    // 这里不是使用alloc,而是调用[[super allocWithZone:NULL] init ] ,为什么是super而不是self呢? 这是因为已经在self中冲在了基本对象的分配方法,所以需要借用父类的(NSobject)的功能帮助处理底层内存分配的杂务;    

        }

        return sharesingleton;

    }

    // 覆盖NSObject方法

    +(id)allocWithZone:(NSZone *)zone

    {

        return [[self shareIstance] retain];

    }

    -(id)copyWithZone:(NSZone *)zone

    {

        return self;//覆盖父类 NScoping 中的方法

    }

    -(id)retain

    {

        return self;

    }

    -(NSUInteger)retainCount

    {

        return NSUIntegerMax;//无穷大的数,表示不能释放

    }

    -(oneway void)release

    {

        //什么也不做

    }

    -(id)autorelease

    {

        return self;

    }

    @end

    注意:所谓单例,即我们自己创建一个单例,该类只能生成唯一的对象,即用  if (sharesingleton == nil)    方法来保证唯一性,为了防止该对象被复制(copy)或者retain 和 release 等操作,我们必须在所创建的单例的实现文件( .m 文件)中将父类的这些方法给覆盖,该目的是为了保证单例模式的一个严谨性。

  • 相关阅读:
    photoSlider-原生js移动开发轮播图、相册滑动插件
    JavaScript库开发者们的规则
    如何提高手机APP的用户体验?
    html清除浮动的6种方法
    JS内存泄露常见原因
    web前端开发规范文档
    jQuery无缝循环开源多元素动画轮播jquery.slides插件
    9种CSS3炫酷图片展开预览展示动画特效
    纯css3 transforms 3D文字翻开翻转3D开放式效果
    html5+css3第一屏滚屏动画效果
  • 原文地址:https://www.cnblogs.com/YangFuShun/p/4505674.html
Copyright © 2011-2022 走看看