swift之单利的创建

几中单利的创建方式:https://www.jianshu.com/p/230cc900948c

//单利的类

import UIKit

 

class LYBsingle: NSObject {

  @objc  var paraone:String?//单利的属性

    internal static let instance = LYBsingle()

    //必须保证init方法的私有性,只有这样,才能保证单例是真正唯一的,避免外部对象通过访问init方法创建单例类的其他实例。由于Swift中的所有对象都是由公共的初始化方法创建的,我们需要重写自己的init方法,并设置其为私有的。

    private override init(){

        print("create 单例")

    }

//下面两个方法,如果累不是继承自NSObject,就不需要写

override func copy() -> Any {  

return self }  

 

override func mutableCopy() -> Any {  

return self }

 

    func single()

    {

        print("单例")

    }

}

//创建单利,并给单利的属性赋值,调用单利的方法

 

import UIKit

 

class LYBDaikuanVC: LYBBaseVC {

   

    override func viewDidLoad() {

        super.viewDidLoad()

        

        let single=LYBsingle.instance

        let single1=LYBsingle.instance

        let single2=LYBsingle.instance

        single.single()

        single1.single()

        single2.single()

      single.paraone="paraOne"//给参数赋值

        print("\(single)--\(single1)--\(single2)--\(single.paraone!)")

    }

   

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

       

    }

    

 

    

}

---控制台打印的结果:

create 单例

单例

单例

单例

<FastappSwift.LYBsingle: 0x604000448d90>--<FastappSwift.LYBsingle: 0x604000448d90>--<FastappSwift.LYBsingle: 0x604000448d90>--paraOne

 

===============

 

Swift 实现

严格单例模式

大多数 Objective-C 的类都继承自 NSObject,而 Swift 的类可以继承自 NSObject 或者不继承。

继承自 NSObject

class SingletonClass: NSObject {
@objc  var paraone:String?//单利的属性
    static let shared = SingletonClass()
    
    private override init() {}
    
    override func copy() -> Any {
        return self 
    }
    
    override func mutableCopy() -> Any {
        return self 
    }
    
    // Optional
    func reset() {
       
    }
}

静态属性 shared 持有唯一的实例,对外公开。

重载 init() 方法,使其对外不可见,不可以在外部调用,防止在外部创建实例。

重载 copy()、mutableCopy() 方法,返回 self,防止在外部复制实例。这里也可以返回 SingletonClass.shared,效果是一样的,因为只有一个实例。只有 shared 能调用 copy()、mutableCopy() 方法,那么 self 就是 shared。写 self,代码比较简洁。

单例一旦创建,一直持有,不能手动销毁,但可以重置数据。如果需要的话,可以添加一个重置数据的方法 reset()。例如,当前用户退出登录,需要把当前用户实例的所有属性重置为默认值,防止数据错误。

不继承自 NSObject

class SingletonClass{
    
    static let shared = SingletonClass()
    
    private init() {}
    
    // Optional
    func reset() {
       
    }
}

不继承自 NSObject 的类没有 copy()、mutableCopy() 方法,不需要重载。其他同上。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值