单例的写法

1.

#import "MySingleton.h"

static MySingleton *_singleton = nil;

+ (id)shareObject

{

@synchronized(self){

if (_singleton == nil) {

_singleton = [[MySingleton alloc] init];

}

}

return _singleton;

}

@end

@synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改。这个是objective-c的一个锁定令牌,防止self对象在同一时间内被其它线程访问,起到线程的保护作用。 一般在公用变量的时候使用,如单例模式或者操作类的static变量中使用。

2.

#import "MySingleton.h"

@implementation MySingleton

+ (id)shareObject

{

static MySingleton *_singleton = nil;

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

_singleton = [[MySingleton alloc] init];

});

return _singleton;

}

@end

void dispatch_once( dispatch_once_t *predicate, dispatch_block_t block);

该函数接收一个dispatch_once用于检查该代码块是否已经被调度的谓词(是一个长整型,实际上作为BOOL使用)。它还接收一个希望在应用的生命周期内仅被调度一次的代码块,对于本例就用于shared实例的实例化。

dispatch_once不仅意味着代码仅会被运行一次,而且还是线程安全的,这就意味着你不需要使用诸如@synchronized之类的来防止使用多个线程或者队列时不同步的问题。

该方法有很多优势:

1 线程安全

2 很好满足静态分析器要求

3 和自动引用计数(ARC)兼容

4 仅需要少量代码

单例的写法

时间: 2024-10-10 05:03:44

单例的写法的相关文章

Swift单例的写法

Swift单例的写法 by 伍雪颖 override func viewDidLoad() { super.viewDidLoad() let instance = SingletonClass.shared } class SingletonClass { class var shared: SingletonClass { struct Static { static let instance: SingletonClass = SingletonClass() } return Stati

Swift2.0单例的写法

在网上找到了三种写法,都跟 struct 有关系,也许是 Swift1.0的写法吧.不过现在已经到了 Swift2.0 的时代,我在这里提供一种更加简单的单例写法.管用! 先看例子: import Foundation public class SwiftSingleton{     var name = "000"     public static let instance = SwiftSingleton() //这个位置使用 static,static修饰的变量会懒加载    

基于unity的单例设计模式写法

设计模式有23中,都是为了解藕设计的.就先拿单例设计模式说说把.因为平常最起码你也得用到单例设计先弄一个泛型的单例模板代码如下: 1 //泛型的单例设计模式.项目中用的多 2 public class GameController<T> : MonoBehaviour where T :GameController<T> { 3 private static T _instance; 4 public static T Instance 5 { 6 get 7 { 8 if (_i

单例各种写法

1. + (id)sharedInstance { static dispatch_once_t once = 0; //被访问次数 当访问一次的时候 下次就不在访问了 __strong static id _sharedObject = nil; dispatch_once(&once, ^{ _sharedObject = [[self alloc] init]; }); return _sharedObject; } 2. static AccountManager *DefaultMan

iOS 标准单例的写法

- (single *)getSingle{ static single *s=nil; static dispatch_once_t t; dispatch_once(&t, ^{ s=[[single alloc]init]; }); return s; }

IOS_地图_定位_天气预报_Block回调_单例

H:/1021/00_block回调.h /* 通过block回调 定义block代码块,目的是解析完成之后调用 返回值是 void 参数是 数组,里面的每个成员是一个NSString*/ typedef void(^WeatherFinishedBlock)(NSArray *dataList); @interface WeatherXMLPaser : NSObject // 解析器解析数据,参数1是要解析的数据,参数2是解析完毕回调的代码块 - (void)parserWeatherDat

iOS单例创建的一点疑惑

线程安全的单例常用写法, +(AccountManager *)sharedManager{ static AccountManager *defaultManager = nil; disptch_once_t once; disptch_once(&once,^{ defaultManager = [[self alloc] init]; }); return defaultManager; } 在用的过程中,有点疑惑的点是:static AccountManager *defaultMan

(Object-C)学习笔记 --OC的懒加载和单例方法

OC的懒加载 什么是懒加载: 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化. 懒加载的好处 (1)不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强 (2)每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合 懒加载的例子: #import "MusicTableViewController.h&quo

Javascript 设计模式 单例 http://blog.csdn.net/lmj623565791/article/details/30490955/

转载请标明出处:http://blog.csdn.NET/lmj623565791/article/details/30490955 一直很喜欢Js,,,今天写一个Js的单例模式实现以及用法. 1.单例模式的写法 单例模式写法相当简单: [javascript] view plain copy var singleTon = { m1: "memeber first ", m2: "memeber second ", f1: function () { consol