찾다

 >  Q&A  >  본문

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일 전587

모든 응답(3)나는 대답할 것이다

  • 给我你的怀抱

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

    여기서

    class 키워드는 중첩 클래스를 정의하지 않지만 sharedInstance가 클래스 속성임을 나타냅니다. 물론 shareInstance는 위에서 언급한 computed property(계산된 속성)을 의미하지 않습니다. 하지만 get-only property(읽기 전용 속성)입니다. getter은 이 읽기 전용 속성의 struct(속성을 반환하는 메서드) 내에 정의됩니다. 이 struct 안에는 두 개의 정적 속성이 있습니다. onceToken이 태그라는 것을 알 수 있습니다. dispatch_once dispatch_once을 사용하면 GCD에서 일회성 메서드를 실행하는 데 사용되는 함수입니다. dispatch_once에 전달된 클로저는 한 번만 실행된다는 점만 이해하면 됩니다. 결론적으로 Static.instance = TheOneAndOnlyKraken()입니다. 이 문장은 TheOneAndOnlyKraken의 인스턴스를 초기화한 다음 이 인스턴스를 Static 구조의 정적 속성 instance에 할당하고 마지막으로 Static.instance!를 반환합니다. 즉, TheOneAndOnlyKraken의 인스턴스가 반환됩니다. 그 이유는 Static.instance = TheOneAndOnlyKraken() 이 문은 한 번만 실행되며, 앞으로 생성된 인스턴스를 직접 반환하므로 싱글톤이 보장될 수 있기 때문입니다. 이것이 분명합니까?

    하지만 솔직히 말해서 Swift에서 싱글톤을 작성하는 것이 그렇게 번거로울 필요는 없습니다. 다음과 같습니다:

    으아악

    회신하다
    0
  • 漂亮男人

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

    sharedInstance는 클래스가 아니라 정적 계산된 속성입니다. 이 속성의 유형은 <🎜. >

    중괄호 안의

    은 컴퓨팅 속성에 대한 코드입니다. 인스턴스를 생성하는 부분은 dispatch_oncestruct ...... return Static.instance!로 한 번만 실행되도록 보장됩니다.

    회신하다
    0
  • PHPz

    PHPz2017-04-28 09:06:48

    swift 싱글턴에 대한 외국 블로그의 글을 참고하시면 됩니다

    회신하다
    0
  • 취소회신하다