单例设计的定义

 1 /*
 2  @synchronized 的作用是创建一个互斥锁,保证此时没有其
 3  它线程对self对象进行修改。 这个是objective-c的一个锁定
 4  令牌,防止self对象在同一时间内被其它线程访问,起到线程
 5  的保护作用。一般在公用变量的时候使用,如单例模式或者
 6  操作类的static变量中使用。
 7  */
 8 #import "Singleton.h"
 9
10 @implementation Singleton
11 static id shared = nil;//2.初始化一个静态空指针
12 +(id)sharedInstance
13 {
14     @synchronized(self)
15     {
16         if(shared == nil)
17         {
18             shared = [[[self class] alloc]init];
19         }
20     }
21     return shared;
22 }
23 +(id)allocWithZone:(struct _NSZone *)zone
24 {
25     if(shared == nil)
26     {
27         shared = [super allocWithZone:zone];
28     }
29     return shared;
30 }
31 +(id)alloc
32 {
33     if(shared == nil)
34     {
35         shared = [super alloc];
36     }
37     return shared;
38 }
39 -(id)copyWithZone:(NSZone *)zone
40 {
41     return shared;
42 }
43 -(id)mutableCopyWithZone:(NSZone *)zone
44 {
45     return shared;
46 }
47 @end
时间: 2024-10-11 10:24:09

单例设计的定义的相关文章

Java设计模式中的单例设计

/** * 单例设计模式 * 应用场合:只需要一个对象的 * 作用:保证整个应用程序中某个实例有且只有一个 * 类型有:饿汉模式.懒汉模式 * 下面的例子是一个饿汉模式的例子 */ class SingleDemo { // 1.将构造方法私有化,不允许外部直接创建使用 private SingleDemo() {} // 2.创建类的唯一实例,使用private static修饰 private static SingleDemo instance = new SingleDemo(); //

Spring容器-ApplicationContext的单例设计

Spring容器-ApplicationContext的单例设计 每次通过new创建一个ApplicationContext容器,都会执行refresh方法,看源代码了解到这个refresh方法会重新加载配置文件,并且这个创建的容器对象持有一个所有singleton类型bean的map集合,从而实现单例,而且这个map对象的生命周期和容器对象的生命周期是一样的 如果我们每次都通过new一个容器对象,那么每次都要重新加载配置文件,都要重新生成这个singleton bean的集合,这样所谓的单例就

【小白的java成长系列】——构造方法私有化(单例设计)

有了解过spring框架的童鞋们就知道,spring的bean默认是什么形式呀?---单例形式的. 问:那什么叫做单例?单例其实就是Singleton,顾名思义就是只有单个的实例对象操作. 那为什么要使用单例呢? 至于这个问题,后面再做解释,我们先看代码: package me.javen.oop; public class SingletonDemo { public static void main(String[] args) { Singleton singleton1 = Single

黑马程序员_java多线程 单例设计

------- <a href="http://www.itheima.com" target="blank">android培训</a>.<a href="http://www.itheima.com" target="blank">java培训</a>.期待与您交流! ---------- 一.线程的方法 1.yield让出cpu 2.setPriority()设置线程的优先

单例的宏定义实现-07-GCD

1 // 2 // LYHSingleTon.h 3 // 07-单例的宏定义实现 4 // 5 // Created by mac on 16/4/22. 6 // Copyright © 2016年 mac. All rights reserved. 7 // 8 9 #ifndef LYHSingleTon_h 10 #define LYHSingleTon_h 11 12 // .h文件 13 14 #define LYHSingleTonH + (instancetype)shared

单例设计

常见的单例设计模式有以下7种 1.懒汉  线程不安全 public class Singleton { private static Singleton instance; private Singleton(){} public static Singleton getInstance(){ if(instance == null){ instance = new Singleton(); } return instance; } } 所谓懒汉 , 就是初始化类的时候不创建实例 , 什么时候使

(一二三)基于GCD的dispatch_once实现单例设计

要实现单例,关键是要保证类的alloc和init仅仅被调用一次.而且被自身强引用防止释放. 近日读唐巧先生的<iOS开发进阶>.受益匪浅,通过GCD实现单例就是收获之中的一个,以下把这种方法与大家分享. 在GCD中,有一个函数dispatch_once,能够实现代码段的一次性运行,和static修饰的变量赋值的一次性一样.我们结合static和dispatch_once,就能够简单的实现单例. 以下的代码实现了SomeClass单例: #import <Foundation/Founda

23种设计模式式之Singleton(单例设计模)【学习笔记】

单例模式是设计模式中最简单,他要求设计者保证该类只有一个实例,之前我是挂载脚本实现单例, 该方法非常简单,使用的直接调用Singleton.instance就可以了 using UnityEngine; using System.Collections; public class Singleton : MonoBehaviour { public static Singleton instance; void Awake(){ instance = this; } } 但是这种写法并不规范,因

OC中的单例设计模式及单例的宏抽取

1 // 在一个对象需要重复使用,并且很频繁时,可以对对象使用单例设计模式 2 // 单例的设计其实就是多alloc内部的allocWithZone下手,重写该方法 3 4 #pragma Person.h文件 5 6 #import <Foundation/Foundation.h> 7 @interface Person : NSObject <NSCopying,NSMutableCopying> 8 + (instancetype)sharePerson; // 给类提供一