OC 和 swift 创建单例方法

简介: OC 和 swift 创建单例方法

OC单例


1.使用GCD(推荐使用)


+ (instancetype)sharedInstance {
    static Singleton *shared = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        shared = [[Singleton alloc] init];
    });
    return _shared;
}


2.单线程模式单例


+(Manager *)defaultManager{
  static Singleton *manager = nil;
  if(!manager){
      manager=[[Singleton alloc] init];
  }
  return  manager;
}


此单例只有在单个线程使用的情况下实用,在多线程的情况下,会产生线程不安全的情况。


3.多线程加锁单例


// @synchronized加锁
+(instancetype)defaultManager
{
    static Singleton *singleton;
    @synchronized (self) {
    if (!singleton) {
        singleton = [[Singleton alloc] init];
      }
    }
    return singleton;
}


加锁以后,当多个线程同时调用defaultManager时,由于@synchronized已经加锁,只能有一个线程创建Singleton实例。这样就解决了第一种情况的弊端。


缺点:只有在Singleton未创建时,加锁才是必要的。如果singleton已经创建,这个时候还加锁的话,会影响性能。


swift单例


1.方式一:类常量(建议使用)


static let sharedInstance = Singleton()


2.方式二:嵌套结构体变量格式


class Singleton {
    class var sharedInstance: Singleton {
        struct Static {
            static let instance: Singleton = Singleton()
        }
        return Static.instance
    }
}


3.方式三:类似OC的创建方式dispatch_once


class Singleton {
    class var sharedInstance: Singleton {
        struct Static {
            static var onceToken: dispatch_once_t = 0
            static var instance: Singleton? = nil
        }
        dispatch_once(&Static.onceToken) {
            Static.instance = Singleton()
        }
        return Static.instance!
    }
}


相关文章
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
392 2
|
Swift iOS开发
Swift 方法
10月更文挑战第29天
109 4
|
Swift Perl
OC和swift混合工程更新库时报:target has transitive dependencies that include statically linked binaries
OC和swift混合工程更新库时报:target has transitive dependencies that include statically linked binaries
579 0
Swift4.0判断本函数是否在其它类有相同的方法
Swift4.0判断本函数是否在其它类有相同的方法
178 0
|
API Swift iOS开发
45 Swift和OC的混编
Swift和OC的混编
283 0
|
Swift iOS开发
iOS OC混编Swift 后者无法走断点
iOS OC混编Swift 后者无法走断点
224 0
|
Swift 开发者
Swift - swift3.0中代理方法的使用
Swift - swift3.0中代理方法的使用
215 0
|
Swift iOS开发
Swift - 与OC混编时如何创建桥接头文件
Swift - 与OC混编时如何创建桥接头文件
699 0
Swift - 与OC混编时如何创建桥接头文件
|
Swift iOS开发
oc与swift混编
1.swift中调用oc;2.oc中调用swift
573 0
oc与swift混编
|
Swift
Swift和OC控制器互相跳转
Swift和OC控制器互相跳转
484 0