singleton(转载)

原 iOS单例宏

发表于10个月前(2014-08-17 00:46)   阅读(687) | 评论(0) 2人收藏此文章, 我要收藏

赞0

7.16,杭州,阿里巴巴。阿里百川无线开放大会报名开启,用技术驱动无线新商业

摘要 我们每一个人程序员都知道单列模式,可是,有多少人会把单列封装呢?你们有没有考虑过,每次都要写这些固定的东西,是不是很恶心呢?浪费时间……下面简单介绍一下我定义的单列头文件!

iOS 单例 宏定义

目录[-]

先别急,先简单提一下单列的概念,当然具体的描述可能仁者见仁智者见智了! 
1.单例设计模式(Singleton) 
1> 什么是单列: 它可以保证某个类创建出来的对象永远只有1个

2> 作用(为什么要用)

  • 节省内存开销
  • 如果有一些数据, 整个程序中都用得上, 只需要使用同一份资源(保证大家访问的数据是相同的,一致的)
  • 一般来说, 工具类设计为单例模式比较合适

3> 怎么实现,老程序员是碰到这样的问题的!arc下就少了!

  • MRC(非ARC)
  • ARC

废话少说,先来看一下我的单例模式下的头文件! 这里主要是__has_feature(objc_arc) 判断了一下是否为arc,所以代码看上去有点多!

<!-- lang: cpp -->
// 帮助实现单例设计模式

// .h文件的实现

define SingletonH(methodName) + (instancetype)shared##methodName;

// .m文件的实现

if __has_feature(objc_arc) // 是ARC

define SingletonM(methodName) \

static id _instace = nil; \

  • (id)allocWithZone:(struct NSZone *)zone \ 
    { \ 
    if (
    instace == nil) { \ 
    static dispatch_once_t onceToken; \ 
    dispatch_once(&onceToken, ^{ \ 
    instace = [super allocWithZone:zone]; \ 
    }); \ 
    } \ 
    return 
    instace; \ 
    } \ 
    \
  • (id)init \ 
    { \ 
    static dispatch_once_t onceToken; \ 
    dispatch_once(&onceToken, ^{ \ 
    instace = [super init]; \ 
    }); \ 
    return 
    instace; \ 
    } \ 
    \
  • (instancetype)shared##methodName \ 
    { \ 
    return [[self alloc] init]; \ 
    } \
  • (id)copyWithZone:(struct NSZone *)zone \ 
    { \ 
    return 
    instace; \ 
    } \ 
    \
  • (id)mutableCopyWithZone:(struct NSZone *)zone \ 
    { \ 
    return 
    instace; \ 
    }

else // 不是ARC

define SingletonM(methodName) \

static id _instace = nil; \

  • (id)allocWithZone:(struct NSZone *)zone \ 
    { \ 
    if (
    instace == nil) { \ 
    static dispatch_once_t onceToken; \ 
    dispatch_once(&onceToken, ^{ \ 
    instace = [super allocWithZone:zone]; \ 
    }); \ 
    } \ 
    return 
    instace; \ 
    } \ 
    \
  • (id)init \ 
    { \ 
    static dispatch_once_t onceToken; \ 
    dispatch_once(&onceToken, ^{ \ 
    instace = [super init]; \ 
    }); \ 
    return 
    instace; \ 
    } \ 
    \
  • (instancetype)shared##methodName \ 
    { \ 
    return [[self alloc] init]; \ 
    } \ 
    \
  • (oneway void)release \ 
    { \ 

    } \ 
    \
  • (id)retain \ 
    { \ 
    return self; \ 
    } \ 
    \
  • (NSUInteger)retainCount \ 
    { \ 
    return 1; \ 
    } \
  • (id)copyWithZone:(struct NSZone *)zone \ 
    { \ 
    return 
    instace; \ 
    } \ 
    \
  • (id)mutableCopyWithZone:(struct NSZone *)zone \ 
    { \ 
    return 
    instace; \ 
    }

endif

这个里面完完全全的做到了,单列所有情况的考虑,包括copy情况,多线程,还有自动判断ARC和MRC情况! 
用的时候只需要在包含头文件然后是用下面 
.h文件下:SingletonH(HttpTool) 
.m文件下:SingletonM(HttpTool)

这东西谁用谁知道!!!!嘻嘻!希望对读者有帮助!

原文:http://my.oschina.net/panyong/blog/302502#OSC_h1_1

时间: 2024-12-22 12:39:58

singleton(转载)的相关文章

Java 设计模式 单例模式(Singleton) [ 转载 ]

Java 设计模式 单例模式(Singleton) [ 转载 ] 转载请注明出处:http://cantellow.iteye.com/blog/838473 前言 懒汉:调用时才创建对象 饿汉:类初始化时就创建对象 第一种(懒汉,线程不安全): 1 public class Singleton { 2 private static Singleton instance; 3 private Singleton (){} 4 5 public static Singleton getInstan

Swift中编写单例的正确方式

Swift中编写单例的正确方式 2015-12-07 10:23 编辑: yunpeng.hu 分类:Swift 来源:CocoaChina翻译活动 14 10647 Objective-CSwift单例 招聘信息: Cocos2d-x 工程师 cocos2dx手游客户端主程 wp开发 iOS开发工程师 iOS软件工程师 iOS研发工程师 iOS讲师 iOS开发工程师 iOS高级开发工程师 iOS 高级软件工程师 iOS高级开发工程师 本文由CocoaChina译者leon(社区ID)翻译自kr

Java-单例模式(singleton)-转载

概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功能.每台计算机可以有若干个打印机,但只能有一个Printe

Java单例模式(Singleton)以及实现《转载》

一. 什么是单例模式 因程序需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 二. 单例模式的特点 1. 单例模式只能有一个实例. 2. 单例类必须创建自己的唯一实例. 3. 单例类必须向其他对象提供这一实例. 三. 单例模式VS静态类 在知道了什么是单例模式后,我想你一定会想到静态类,"既然只使用一个对象,为何不干脆使用静态类?",这里我会将单例模式和静态类进行一个比较. 1. 单例可以继承和被继承,方法可以被override,而静态方

两种用于派生的Singleton模式(以TextureMgr为例)

Singleton,顾名思义,从字面上来理解就是单例模式,这是C++程序中 常用到的一种设计模式,特别是像文件管理器,纹理管理器这种整个软件 中只需要唯一的实例来管理所有资源时,这种模式的价值便得以体现. 下面来介绍两种用于派生管理的Singleton模式: 其中,第一种是Gof版本的Singleton, 其代码如下: //[Singleton_Gof.h] #pragma once template<typename T> class Singleton_Gof { protected: s

设计模式的征途—1.单例(Singleton)模式

单例模式属于创建型模式的一种,创建型模式是一类最常用的设计模式,在软件开发中应用非常广泛.创建型模式将对象的创建和使用分离,在使用对象时无需关心对象的创建细节,从而降低系统的耦合度,让设计方案更易于修改和扩展.每一个创建型模式都在视图回答3个问题:3W -> 创建什么(What).由谁创建(Who)和何时创建(When). 本篇是创建型模式的第一篇,也是最简单的一个设计模式,虽然简单,但是其使用频率确是很高的. 单例模式(Singleton) 学习难度:★☆☆☆☆ 使用频率:★★★★☆ 一.单例

构造方法的私有——转载于谷文仁

在讲解本操作之前,首先来观察如下的程序. class Singleton { // 定义一个类 public void print() { System.out.println("Hello World .") ; } } public class Test { public static void main(String args[]) { Singleton inst = null ;   // 声明对象 inst = new Singleton() ;         // 实例

Singleton(单例)模式和Double-Checked Locking(双重检查锁定)模式

问题描述 现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能:在实际开发过程中,会专门有一个日志模块,负责写日志,由于在系统的任何地方,我们都有可能要调用日志模块中的函数,进行写日志.那么,如何构造一个日志模块的实例呢?难道,每次new一个日志模块实例,写完日志,再delete,不要告诉我你是这么干的.在C++中,可以构造一个日志模块的全局变量,那么在任何地方就都可以用了,是的,不错.但是,我所在的开发部门的C++编码规范是参照Google的编码规范的. 全局变量在项目

【转载】Spring介绍之二

Spring框架,是进行对象管理,对象关联,解耦的一个中间层框架.SSH(Struts+Spring+Hibernate)三大Spring在中间就起着一个承上启下的作用.好,首先我们先来看一下Spring框架的一些知识点,通过下边这张图来总括一下: 好,这篇博客咱们先来对Spring框架进行一个初步的了解. 一,框架介绍: 1,先看一下帮助文档的这张图,里边主要包括了Spring自身的功能,还有可以和其框架结合的一些框架,通过这张图可以看出,Spring框架和其他框架的集成能力是非常强的. 2,