如何在Swift中将NSCoding与单例类一起使用

亚瑟·香布里亚德(Arthur Chambriard)

对于我的iOS应用中的用户模型,我使用单例。我想用保存用户对象NSCoding

保存它没问题,但是如何将解码后的用户分配给我的单例的共享实例?

还有一个问题,对用户对象使用单例是个好主意吗?

总站

您需要做的是一种非传统的方法来实现单例模式。通常,您很快就会这样做:

class MySingleton {
static let sharedInstance = MySingleton()
    init() {
       println("BBB")
    }
}

您不能以这种方式使用它,因为所有的设置工作都推迟到了初始化程序,而您却想在实际创建实例之前进行一些调整。做您需要的并保持线程安全的最简单方法是从Apple的C库的深处使用dispatch_once:

class MySingleton : NSObject {
    class var sharedInstance: MySingleton {
        struct Statics {
            static var instance: MySingleton? = nil
            static var dispatchOnceToken: dispatch_once_t = 0
        }

        dispatch_once(&Statics.dispatchOnceToken) {
           if let data: NSData = .... (get your data here) {
               let decodedInstance = NSKeyedUnarchiver.unarchiveObjectWithData(data: data) as! MySingleton
           Statics.instance = decodedInstance
           } else {
              Statics.instance = MySingletion()
           }
        }
        return Statics.instance!
    }
}

附带说明-我通常做的是使用Core Data对象为用户建模,因此避免了持久性带来的痛苦。我将用户作为字段保留在某些单例类上,该类专门用于保持常规应用程序状态,访问令牌等。类初始化程序从持久性中恢复用户对象,并将其分配给它的字段。

最后但并非最不重要的一点-在向应用程序中引入任何单例之前,请三思而后行,因为这种模式很容易被滥用!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在node.js中将单例设计模式与mysql连接和池一起使用

来自分类Dev

如何在node.js中将单例设计模式与mysql连接和池一起使用

来自分类Dev

如何在Swift中将UILongPressGestureRecognizer与UICollectionViewCell一起使用?

来自分类Dev

帮助器类与Guice一起作为单例

来自分类Dev

如何在带有Java类的Elasticsearch中将geo_point与geohash一起使用?

来自分类Dev

如何在gtest中将朋友类与命名空间一起使用

来自分类Dev

如何在vb.net中将'withevents'与数组类一起使用?

来自分类Dev

如何在gtest中将朋友类与命名空间一起使用

来自分类Dev

我如何在 swift3 中将单例类作为委托人

来自分类Dev

单例和线程不能一起使用

来自分类Dev

将可堆叠特征与单例对象一起使用

来自分类Dev

如何在Swift 3中将sin(_:)与FloatingPoint值一起使用

来自分类Dev

如何在Swift中将枚举和switch()与UITableViewController一起使用

来自分类Dev

Autofac单例和非单例一起

来自分类Dev

如何在.NET中将SQLite与NLog一起使用

来自分类Dev

如何在RethinkDB中将getall与orderby一起使用

来自分类Dev

如何在bash中将`tail`与`timeout`一起使用

来自分类Dev

如何在ruby中将wget与`&`一起使用

来自分类Dev

如何在Android中将Netcipher与Retrofit一起使用?

来自分类Dev

如何在Python中将if语句与数组一起使用?

来自分类Dev

如何在yacc中将yylval与union一起使用

来自分类Dev

如何在HTML中将flex与列表一起使用?

来自分类Dev

如何在SwiftUI中将ObservedObject与DatePicker一起使用?

来自分类Dev

如何在PostgreSQL中将COALESCE与INTERVAL一起使用?

来自分类Dev

如何在React中将PropTypes与Typescript一起使用

来自分类Dev

如何在Android中将TextInputLayout与EditText一起使用

来自分类Dev

如何在PL / pgSQL函数中将WITH与IF一起使用

来自分类Dev

如何在mongodb中将查找与$ push一起使用

来自分类Dev

如何在Rails中将jQuery与Sunspot一起使用?

Related 相关文章

  1. 1

    如何在node.js中将单例设计模式与mysql连接和池一起使用

  2. 2

    如何在node.js中将单例设计模式与mysql连接和池一起使用

  3. 3

    如何在Swift中将UILongPressGestureRecognizer与UICollectionViewCell一起使用?

  4. 4

    帮助器类与Guice一起作为单例

  5. 5

    如何在带有Java类的Elasticsearch中将geo_point与geohash一起使用?

  6. 6

    如何在gtest中将朋友类与命名空间一起使用

  7. 7

    如何在vb.net中将'withevents'与数组类一起使用?

  8. 8

    如何在gtest中将朋友类与命名空间一起使用

  9. 9

    我如何在 swift3 中将单例类作为委托人

  10. 10

    单例和线程不能一起使用

  11. 11

    将可堆叠特征与单例对象一起使用

  12. 12

    如何在Swift 3中将sin(_:)与FloatingPoint值一起使用

  13. 13

    如何在Swift中将枚举和switch()与UITableViewController一起使用

  14. 14

    Autofac单例和非单例一起

  15. 15

    如何在.NET中将SQLite与NLog一起使用

  16. 16

    如何在RethinkDB中将getall与orderby一起使用

  17. 17

    如何在bash中将`tail`与`timeout`一起使用

  18. 18

    如何在ruby中将wget与`&`一起使用

  19. 19

    如何在Android中将Netcipher与Retrofit一起使用?

  20. 20

    如何在Python中将if语句与数组一起使用?

  21. 21

    如何在yacc中将yylval与union一起使用

  22. 22

    如何在HTML中将flex与列表一起使用?

  23. 23

    如何在SwiftUI中将ObservedObject与DatePicker一起使用?

  24. 24

    如何在PostgreSQL中将COALESCE与INTERVAL一起使用?

  25. 25

    如何在React中将PropTypes与Typescript一起使用

  26. 26

    如何在Android中将TextInputLayout与EditText一起使用

  27. 27

    如何在PL / pgSQL函数中将WITH与IF一起使用

  28. 28

    如何在mongodb中将查找与$ push一起使用

  29. 29

    如何在Rails中将jQuery与Sunspot一起使用?

热门标签

归档