《从零开始学Swift》学习笔记(Day 63)——Cocoa Touch设计模式及应用之单例模式
原创文章,欢迎转载。转载请注明:关东升的博客
什么是设计模式。设计模式是在特定场景下对特定问题的解决方案,这些解决方案是经过反复论证和测试总结出来的。实际上,除了软件设计,设计模式也被广泛应用于其他领域,比如UI设计和建筑设计等。
下面来介绍Cocoa Touch框架中的设计模式中的单例模式。
单例模式
单例模式的作用是解决“应用中只有一个实例”的一类问题。在Cocoa Touch框架中,有UIApplication、NSUserDefaults和NSNotificationCenter等单例类。另外,NSFileManager和NSBundle类虽然属于Cocoa框架的内容,但也可以在Cocoa Touch框架中使用(Cocoa框架中的单例类有NSFileManager、NSWorkspace和NSApplication等)。
问题提出
在一个应用程序的生命周期中,有时候只需要某个类的一个实例。例如:当iOS应用程序启动时,应用的状态由UIApplication类的一个实例维护,这个实例代表了整个“应用程序对象”,它只能是一个实例,其作用是共享应用程序中的一些资源、控制应用程序的访问,以及保持应用程序的状态等。
解决方案
单例模式的实现有很多方案,苹果公司在《Using Swift with Cocoa and Objective-C》官方文档中给出了一种单例模式的实现。最简单形式代码如下:
class Singleton { static let sharedInstance = Singleton() }
上述代码采用static的类属性实现单例模式,这种类属性只被延迟加载执行一次,即便是在多线程情况下也只是执行一次,并且保证是线程安全的。
如果需要进行一些初始化,可以使用如下带有闭包形式代码:
class Singleton { static let sharedInstance: Singleton = { let instance = Singleton() // 初始化处理 return instance }() }
单例模式除了上述苹果官方给出的实现外,还有很多种实现方式。
欢迎关注关东升新浪微博@tony_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php
最新文章
- dialog
- android开发学习之Level List篇
- tornado RequestHandler request.body &; request.arguments
- html基本标签练习
- 【新产品发布】《EVC8021 RS-232<;>;RS-485/422 隔离接口转换器》
- 【PL/SQL练习】显式游标
- SurfaceView 使用demo 飞机游戏小样
- (转)关于 awk 的 pattern(模式)
- idea上使用maven入门(二)——本地仓库以及使用maven
- 支持动态调频_配置AXP228电源管理_4核8核兼容设计_iTOP-4418/6818开发板
- 使用Python开发chrome插件
- (链表) leetcode 21. Merge Two Sorted Lists
- Win10系列:VC++媒体播放控制1
- 详解 Tomcat 的连接数与线程池
- github上的项目发布成静态网页
- iOS笔记之ScrollView
- node使用JsonWebToken 生成token,完成用户登录、登录检测
- MessagingTimeout: Timed out waiting for a reply to message ID
- Git和Github简单教程【转】
- C#Question:“XXX”的重载均与“System.Threading.WaitCallback”不匹配。
热门文章
- js 复制内容到粘贴板的兼容性
- stl之hash_multiset
- Nodejs 命令行交互神奇 yargs
- 【Android应用开发技术:用户界面】布局管理器
- 分布式系统的CAP和BASE理论
- vivado设计四:自定义IP核测试
- nginx vhosts rewrite 独立文件的方式出现
- 并发insert情况下会发生重复的数据插入问题
- 动态添加定时任务-quartz定时器
- com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown character set: 'utf8mb4'