iOS swift单例模式

普通的写法:

class SwiftSingleton {

class var shared: SwiftSingleton {

if !Inner.instance {

Inner.instance = SwiftSingleton()

}

returnInner.instance!

}

structInner {

staticvar instance: SwiftSingleton?

}

}

但系统多个线程在执行,这种情况下就会创建多个实例,没有保证实例的唯一性。也可以修改成另外一种方式:


class SwiftSingleton {

classvar shared: SwiftSingleton {

returnInner.instance

}

struct Inner {

static let instance: SwiftSingleton = SwiftSingleton()

}

}

首次访问Inner.instance时才会创建SwiftSingleton,不会创建多个对象,但是这样返回对象是想修改重新获取也不好操作。

因此可以使用GCD来实现:

class SwiftSingleton {

classvar shared: SwiftSingleton {

dispatch_once(&Inner.token) {

Inner.instance = SwiftSingleton()

}

return Inner.instance!

}

struct Inner {

static var instance: SwiftSingleton?

static var token: dispatch_once_t = 0

}

}

时间: 2024-08-04 20:07:47

iOS swift单例模式的相关文章

[IOS]swift自定义uicollectionviewcell

刚刚接触swift以及ios,不是很理解有的逻辑,导致某些问题.这里分享一下swift自定义uicollectionviewcell 首先我的viewcontroller不是直接继承uicollectionviewcontroller,而是添加的uicollectionview到我的storyboard, 然后再新建一个swift的文件,让这个swift继承uicollectionviewcell import Foundation class SVGCell :UICollectionView

iOS 的单例模式 dispatch_once

iOS 的单例模式 dispatch_once 有些变量只需要初始化一次(如从文件中读取配置参数,读取设备型号等等),可以使用dispatch_once来进行读取优化,保证只调用API一次,以后就只要直接访问变量即可. WeatherClient.h #import "AFHTTPClient.h" @interface WeatherClient : AFHTTPClient +(WeatherClient *)sharedClient; @end WeatherClient.m #

iOS:Swift界面实例1, 简单界面

Apple推出了基于Objective-C的新语言Swift. 通过实例, 我们可以很好的感受这门新语言 注意事项: 在XCode6_Beta中, 如果有中文, IDE的自动补全功能就会失效, 所以开始调试的时候可以先用英文, 后面再用中文替代. 1. 新建iOS -> Single View Application. 2. 修改AppDelegate.swift文件 1 // 2 // AppDelegate.swift 3 // UIByCode_Swift_1_HelloWorld 4 /

iOS - Swift UISearchController仿微信搜索框

0x01.创建一个UISearchController 如果传入的searchController为nil,则表示搜索的结果在当前控制器中显示,现在我让它在searchVC中显示. // 创建searchResultVC let searchVC = UIViewController() // 设置背景颜色为红色 searchVC.view.backgroundColor = UIColor.red let searchController = UISearchController(search

iOs开发 单例模式 省懒宏

#define singleton_h(name) + (instancetype)shared##name; #if __has_feature(obj_arc) #define singleton_m(name)static id _instance;+ (instancetype)shared##name{static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{_instance = [[self alloc] init];

ios Swift 备忘录

Variables var myInt = 1 var myExplicitInt: Int = 1 // explicit type var x = 1, y = 2, z = 3 // declare multiple integers myExplicitInt = 2 // set to another integer value Constants let myInt = 1 myInt = 2 // compile-time error! Strings var myString =

ios Swift 资源池

Swift入门教程: http://www.cocoachina.com/applenews/devnews/2014/0604/8661.html Swift视频教程: http://www.cocoachina.com/bbs/read.php?tid=204280 Swift官方文档(PDF版): http://www.cocoachina.com/bbs/read.php?tid=204446 Swift官方文档(网页版): https://developer.apple.com/lib

ios Swift 之github

1. 软件类 a) 作者集合 http://nondot.org/sabre/ b) swift for facebook SWIFT是一个易于使用的,基于注解的Java来创建勤俭节约序列化类型和服务库. https://github.com/facebook/swift 2. 游戏类 a)FlappySwift https://github.com/fullstackio/FlappySwift b) 2048 https://github.com/austinzheng/swift-2048

iOS下单例模式实现(objective-c arc gcd)

单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 这里主要介绍下在arc下,利用gcd实现单例. 第一步:声明一个静态实例 static SoundTool *_instance; 第二步:重写初始化方法 + (id)allocWithZone:(struct _NSZone *)zone 在对象初始化分配内存的时候都会调用这个方法,重写该方法时,即便用户没用通过shared方法获取实例,自己初始化依然可以保证得到的是同一个实例. 在gcd后,多线程下保证一个代码只被执