Swift2.0单例的写法

在网上找到了三种写法,都跟 struct 有关系,也许是 Swift1.0的写法吧。不过现在已经到了 Swift2.0 的时代,我在这里提供一种更加简单的单例写法。管用!

先看例子:

import Foundation

public class SwiftSingleton{
    var name = "000"
    public static let instance = SwiftSingleton() //这个位置使用 static,static修饰的变量会懒加载
    
    private init(){
        print("create SwiftSingleton...");
    }
}

然后看测试:

override func viewDidLoad() {
        super.viewDidLoad()
        
        print("viewDidload");
        let s1 = SwiftSingleton.instance
        let s2 = SwiftSingleton.instance
        
        s1.name = "s1"
        s2.name = "s2"
        
        print("s1.name:\(s1.name)   s2.name:\(s2.name)")
    }

打印结果:

viewDidload

create SwiftSingleton...

s1.name:s2   s2.name:s2

从打印结果来看,这个单例确实是懒加载的,而且,确实是单例。

OK了

时间: 2024-12-06 00:37:30

Swift2.0单例的写法的相关文章

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

单例的写法

1. #import "MySingleton.h" static MySingleton *_singleton = nil; + (id)shareObject { @synchronized(self){ if (_singleton == nil) { _singleton = [[MySingleton alloc] init]; } } return _singleton; } @end @synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象

基于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

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

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

单例的创建的各种方法

单例设计模式: 单例的写法: 1. GCD 实现单例: @interface Singleton : NSObject + (Singleton *)sharedSingleton; <1> @end /***************************************************************/ //Singleton.m #import "Singleton.h" @implementation Singleton static Sin

java的单例

原文出处: 张新强 1. 前言 单例(Singleton)应该是开发者们最熟悉的设计模式了,并且好像也是最容易实现的--基本上每个开发者都能够随手写出--但是,真的是这样吗?作为一个Java开发者,也许你觉得自己对单例模式的了解已经足够多了.我并不想危言耸听说一定还有你不知道的--毕竟我自己的了解也的确有限,但究竟你自己了解的程度到底怎样呢?往下看,我们一起来聊聊看~ 2. 什么是单例? 单例对象的类必须保证只有一个实例存在--这是维基百科上对单例的定义,这也可以作为对意图实现单例模式的代码进行