IOS Swift3 四种单例模式详解及实例
发布时间 - 2026-01-10 22:04:28 点击率:次Swift3 单例模式

常见的有这么几种方法
第一种简单到爆的
final class Single: NSObject {
static let shared = Single()
private override init() {}
}
final关键字的作用是这个类或方法不希望被继承和重写
第二种
public extension DispatchQueue {
private static var onceToken = [String]()
public class func once(_ token: String, _ block: () -> Void) {
objc_sync_enter(self)
defer {
objc_sync_exit(self)
}
if onceToken.contains(token) {
return
}
onceToken.append(token)
block()
}
}
final class Single2: NSObject {
static func shared() -> Single2 {
struct Singleton {
static var single: Single2?
}
DispatchQueue.once(NSUUID().uuidString) {
Singleton.single = shared()
}
return Singleton.single!
}
}
第二种完全是OC风格的单例,但是由于Swift3中废弃了原来的dispatch_once_t,所以需要先给DispatchQueue添加一个extension,实现原先的dispatch_once_t效果
第三种
private let single = Single3()
final class Single3: NSObject {
static var shared: Single3 {
return single
}
}
由于Swift3中加强了权限控制,导致如果重写private override init()方法会报错,所以这种写法在Swift3中的安全性未知。
第四种
final class Single4: NSObject {
static var shared: Single4 {
struct Static {
static let instance: Single4 = Single4()
}
return Static.instance
}
private override init() {}
}
在方法内定义静态变量
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Swift
# 单例
# 单例模式详解
# 四种单例模式详解
# Swift 5.1 之类型转换与模式匹配的教程详解
# 深入讲解Swift中的模式匹配
# 深入理解Swift中单例模式的替换及Swift 3.0单例模式的实现
# swift where与匹配模式的实例详解
# 深入解析Swift代理模式
# 仓库模式及其在Swift 项目中的应用详解
# 重写
# 第二种
# 希望能
# 报错
# 谢谢大家
# 第一种
# 先给
# 第三种
# 法会
# 几种方法
# 第四种
# span
# style
# init
# private
# override
# extension
# public
# DispatchQueue
# color
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
晋江文学城电脑版官网 晋江文学城网页版直接进入
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
,网页ppt怎么弄成自己的ppt?
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
JavaScript Ajax实现异步通信
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
网站制作软件有哪些,制图软件有哪些?
Swift中swift中的switch 语句
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
html如何与html链接_实现多个HTML页面互相链接【互相】
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
,在苏州找工作,上哪个网站比较好?
原生JS实现图片轮播切换效果
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
如何在阿里云香港服务器快速搭建网站?
高性价比服务器租赁——企业级配置与24小时运维服务
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
C++用Dijkstra(迪杰斯特拉)算法求最短路径
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
Laravel distinct去重查询_Laravel Eloquent去重方法
简单实现jsp分页
如何在不使用负向后查找的情况下匹配特定条件前的换行符
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
如何注册花生壳免费域名并搭建个人网站?
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
EditPlus中的正则表达式 实战(1)
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
EditPlus中的正则表达式 实战(2)
Linux网络带宽限制_tc配置实践解析【教程】
如何在云主机上快速搭建网站?
利用python获取某年中每个月的第一天和最后一天
新三国志曹操传主线渭水交兵攻略
如何用美橙互联一键搭建多站合一网站?

