两种单例模式的写法

iOS的单例模式有两种官方写法,如下:

(1)不使用GCD

#import "ServiceManager.h"
static ServiceManager *defaultManager;
@implementation ServiceManager
+(ServiceManager *)defaultManager{
    if(!defaultManager)
        defaultManager=[[self allocWithZone:NULL] init];
    return  defaultManager;
}
@end

(2)使用GCD

#import "ServiceManager.h"
@implementation ServiceManager
+(ServiceManager *)sharedManager{
    static dispatch_once_t predicate;
    static ServiceManager * sharedManager;
    dispatch_once(&predicate, ^{
        sharedManager=[[ServiceManager alloc] init];
    });
    return sharedManager;
}
@end

dispatch_once这个函数,它可以保证整个应用程序生命周期中某段代码只被执行一次!

时间: 2024-12-17 12:57:55

两种单例模式的写法的相关文章

iOS开发笔记-两种单例模式的写法

iOS开发笔记-两种单例模式的写法 单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h" static ServiceManager *defaultManager; @implementation ServiceManager +(ServiceManager *)defaultManager{ if(!defaultManager) defaultManager=[[self allocWith

7、java实现的两种单例模式

/* 两种单例模式的演示 */ //饿汉式 class Signal { private Signal(){} private Signal s = new Signal(); public static Signal getInstance() { return s; } } //懒汉式 class Signal { private Signal(){} private Signal s = null; public static Signal getInstance() { if(s ==

两种sql的写法的比较

SUM(p.payable - p.single_price) AS profitCount, m.order_id AS orderId, m.create_time, m.dept_airport_code, m.arrv_airport_code, m.payable AS price FROM om_passenger p, om_order m WHERE p.order_id = m.order_id AND p.ticket_status = '1' AND m.create_ty

几种单例模式的写法

方法一: public class Singleton1 {     private Singleton1(){         System.out.print("Singleton1 created");     }     private static Singleton1 instance = new Singleton1();     public static Singleton1 getInstance(){         return instance;     }

java两种单例模式

第一种 1 package com.atguigu.javase; 2 import java.io.IOException; 3 4 /** 5 * @author _aL0n4k 6 * @version 1.0 7 * @time 2015年9月2日 下午6:12:52 8 */ 9 public class Singleton_HungerMode { //单例模式 - 饥饿式 10 private Singleton_HungerMode() {} //把构造器设置为private,这

我喜欢的两种单例写法

1,第一种: 1 package ToolPackage 2 { 3 /** 4 * 提示 5 * @author tqr <br /> 6 * 创建时间:2014-11-7 下午6:27:10 7 */ 8 public class Tip 9 { 10 private static var instanceB:Boolean=true; 11 private static var instance:Tip; 12 13 public function Tip() 14 { 15 if (i

java基础——java内存,两种单例模式

/* * java运行内存: * 堆(heap):存储的全是对象,每个对象都包含一个与之对应的class信息 * 只有一个heap,被所有线程共享,heap中不存放基本数据类型和对象引用,只放对象本身 * 栈:每个线程都有属于自己的栈(用户态栈),栈中保存基本数据类型的对象和自定义对象的引用,这个引用指向了堆区的实例 * 方法区(静态区):被所有线程共享,包含所有的class和static变量 * 包含整个程序中永远唯一的元素,即class,static变量 * * * 如何确定一个属性,方法要

Unity里面两种单例模式的实现

using System; public class Singleton<T> where T : class, new() { private static T m_instance; public static T instance { get { if (Singleton<T>.m_instance == null) { Singleton<T>.CreateInstance(); } return Singleton<T>.m_instance;

验证码的全部代码(注意两种JavaScript的写法)

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <script src="js/jquery-1.5.2.js"></script> <script type="