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获取某年中每个月的第一天和最后一天  新三国志曹操传主线渭水交兵攻略  如何用美橙互联一键搭建多站合一网站?