cari

Rumah  >  Soal Jawab  >  teks badan

objective-c - Swift中单例模式的写法理解

最近看很多开发的书籍和文章都用这样的一种写法:
阅读来源:http://www.cocoachina.com/swift/20151207/14584.html
书籍阅读来源:《iOS开发指南,从零基础到App Store上架第三版》中的10.4.1的例子
.....
这个是最近的文章

  1. 最丑陋方法(Swift皮,Objective-C心)

  2. TheOneAndOnlyKraken {
    class var sharedInstance: TheOneAndOnlyKraken {

       struct Static {
           static var onceToken: dispatch_once_t = 0
           static var instance: TheOneAndOnlyKraken? = nil
       }
       dispatch_once(&Static.onceToken) {
           Static.instance = TheOneAndOnlyKraken()
       }
       return Static.instance!

    }
    }

关于这种的写法,我思考了很久(也有一周以上,也有看其他资料,还是没理解透彻)
我主要不理解的一个逻辑关系是:
(类中声明类并创建内部类。应该是这样,有点绕)
1、在定义的TheOneAndOnlyKraken类中再定义一个TheOneAndOnlyKraken类型的sharedInstance类,这种嵌套,如果创建了一个sharedInstance,那这个sharedInstance和TheOneAndOnlyKraken的逻辑关系该怎么理解比较通俗易懂?有点死循环的感觉。
2、在sharedInstance类中定义了一个Static结构体,这个结构体中声明了一个TheOneAndOnlyKraken类型的变量instance。最后返回了这个instance变量。这instance和定义的两个类之间的逻辑关系又是如何理解比较通俗易懂。

PS:我是个初学者,对这些声明都比较熟悉,只是其中的逻辑结构不太理解,死循环。个人觉得如果纯粹记住这种写法(不确定是不是一种模板),不理解,都后面写程序中理解不透其中的逻辑结构,那就知其然不知其所以然。
暂时不理解这种逻辑关系,看网站上一大堆资料,貌似都没有好的解释。
求指导!

PHPzPHPz2762 hari yang lalu586

membalas semua(3)saya akan balas

  • 给我你的怀抱

    给我你的怀抱2017-04-28 09:06:48

    Kata kunci

    class di sini tidak mentakrifkan kelas bersarang, tetapi menunjukkan bahawa sharedInstance ialah atribut kelas Sudah tentu, shareInstance tidak menyatakan dengan tegas computed property (atribut dikira) yang disebutkan di atas. tetapi get-only property (atribut baca sahaja). getter ditakrifkan dalam struct (kaedah yang mengembalikan atribut) atribut baca sahaja ini. Terdapat dua atribut statik di dalam struct ini onceToken Apabila digunakan, dispatch_once ialah fungsi yang digunakan untuk melaksanakan kaedah sekali dalam GCD Anda hanya perlu memahami bahawa penutupan yang diluluskan dalam dispatch_once hanya akan dilaksanakan sekali dalam penutupan, Itu sahaja dispatch_once. Ayat ini memulakan tika Static.instance = TheOneAndOnlyKraken(), kemudian menetapkan tika ini kepada atribut statik TheOneAndOnlyKraken dalam struktur Static, dan akhirnya mengembalikan instance, iaitu, tika Static.instance! dikembalikan Sebabnya ialah TheOneAndOnlyKraken penyataan ini hanya akan dilaksanakan sekali, dan ia akan memulangkan secara langsung kejadian yang dijana pada masa hadapan, jadi singleton boleh dijamin. Adakah ini jelas? Static.instance = TheOneAndOnlyKraken()

    Tetapi sejujurnya, menulis singleton dalam Swift tidak semestinya menyusahkan sama sekali. Seperti berikut:

    private let instance = SomeClass()
    class SomeClass {
        public class var singleInstance: SomeClass {
            return instance
        }
    }
    
    //获取单例
    let someClass = SomeClass.singleInstance

    balas
    0
  • 漂亮男人

    漂亮男人2017-04-28 09:06:48

    sharedInstance bukan kelas, tetapi sifat terkira statik Jenis sifat ini ialah TheOneAndOnlyKraken. Anda boleh menganggapnya sebagai kaedah statik dengan 0 parameter >

    dalam kurungan kerinting ialah kod untuk sifat pengiraan Bahagian yang mencipta contoh dijamin akan dilaksanakan sekali sahaja dengan dispatch_sekalistruct ...... return Static.instance!

    balas
    0
  • PHPz

    PHPz2017-04-28 09:06:48

    Anda boleh merujuk kepada apa yang ditulis oleh blog asing tentang singleton yang pantas

    balas
    0
  • Batalbalas