zoukankan      html  css  js  c++  java
  • 单例模式

    单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

    1.单例模式的要点:

      显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

    2.单例模式的优点:

      1.实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例。
      2.灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程
     
    IOS中的单例模式
      在objective-c中要实现一个单例类,至少需要做以下四个步骤:
      1、为单例对象实现一个静态实例,并初始化,然后设置成nil,
      2、实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例,
      3、重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例,
      4、适当实现allocWitheZone,copyWithZone,release和autorelease。

    //

    //  SingleHandel.m

    //  严格单例模式

    //  Created by lanou3g on 14-12-16.

    //  Copyright (c) 2014年 路宁宁. All rights reserved.

    #import "SingleHandel.h"

    static SingleHandel *share = nil;//静态实例,并初始化

    @implementation SingleHandel

    +(SingleHandel *)shareInstance

    {

        if (share == nil) {

            share = [[super allocWithZone:NULL]init];//实例构造检查静态实例是否为nil

        }

        return share;

    }

    //mrc下

    +(id)allocWithZone:(struct _NSZone *)zone 第三步:重写allocWithZone方法

    {

        return [[self shareInstance]retain];

    }

    -(id)copyWithZone:(NSZone *) zone  //第四步

    {

        return self;

    }

    -(id)retain

    {

        return self;

    }

    -(NSUInteger)retainCount

    {

        return NSUIntegerMax;

    }

    //我重载了allocWithZone:,保持了从sharedInstance方法返回的单例对象,使用者哪怕使用alloc时也会返回唯一的实例(alloc方法中会先调用allocWithZone:创建对象)。而retain等内存管理的函数也被重载了,这样做让我们有了把Singleton类变得“严格”了。

    -(oneway void)release

    {

       //

    }

    -(id)autorelease

    {

        return self;

    }

    @end

  • 相关阅读:
    windows 按时自动化任务
    Linux libusb 安装及简单使用
    Linux 交换eth0和eth1
    I.MX6 GPS JNI HAL register init hacking
    I.MX6 Android mmm convenient to use
    I.MX6 GPS Android HAL Framework 调试
    Android GPS GPSBasics project hacking
    Python windows serial
    【JAVA】别特注意,POI中getLastRowNum() 和getLastCellNum()的区别
    freemarker跳出循环
  • 原文地址:https://www.cnblogs.com/luningning0901/p/4168092.html
Copyright © 2011-2022 走看看