关于常用的iOS开发中的设计模式及其应用场景总结下:
1.单例模式
顾名思义,在程序的生命周期中只有一个这样的实例,单例可以全局访问,像 UserDefaults、UIApplication、NotificationCenter都是单例模式。
源码:
class Singleton {
static let shareInstance = Singleton()
private init(){
}
}
2.委托模式
通过协议代理的方式实现,通常用于信息的回传,是一对一对象之间的通信。
import UIKit
//协议定义
protocol UserInfoDelegate {
func returnName(userName: String)
func returnAge(userAge: Int)
}
class UserInfoViewController: UIViewController {
var delegate: UserInfoDelegate?//协议代理
var name: String?
var age: Int?
override func viewDidLoad() {
super.viewDidLoad()
}
func infoDone(){
//调用代理方法
self.delegate?.returnName(userName: name!)
self.delegate?.returnAge(userAge: age!)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
import UIKit
class FirstViewController: UIViewController,UserInfoDelegate {
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
//协议方法
func returnAge(userAge: Int) {
print("age is \(userAge)")
}
func returnName(userName: String) {
print("name is \(userName)")
}
}
3.观察者模式
监听属性等的变化做出相应的改变。在Cocoa Touch 框架中,观察者模式的应用有两个:通知机制和KVO机制。
通知机制:
通知机制是一对多的对象之间的通信,对某个通知感兴趣的对象都可以注册成为接收者。
swift源码:(从ios9开始通知中心对观察者对象进行弱引用不需要手动从通知中心移除)
//定义通知名字常量
let notificationName = NSNotification.Name(rawValue: "updateUserInfo")
//注册监听通知
NotificationCenter.default.addObserver(self, selector: #selector(reloadUserInfo(notification:)), name: notificationName, object: nil)
@objc func reloadUserInfo(notification: NSNotification){
print(notification.object!)
}
//发送通知
NotificationCenter.default.post(name: notificationName, object: ["userName": name!, "userAge": age!])