87-Swift의 단일 예(Singleton)

1871 단어

단례는 무엇입니까?


단례는 소프트웨어 디자인에서 자주 사용하는 모델이다.그것의 핵심 구조에는 단례라고 불리는 특수류만 포함되어 있다.단일 모드를 통해 시스템에서 이 모드를 응용하는 클래스는 하나의 클래스만 하나의 실례가 있다는 것을 보장할 수 있다.즉, 하나의 클래스는 하나의 대상 실례만 있다.

단례적 역할


클래스의 대상을 시스템의 유일한 실례로 만들다.

단례적 특징


4
  • 어떤 종류는 하나의 실례 대상만 있다

  • 4
  • 이 실례 대상을 스스로 만들어야 한다

  • 4
  • 전체 시스템에 이 실례 대상을 제공해야 한다

  • 단례적 장단점


    이점:


    4
  • 실례 제어 단례 모델은 다른 대상이 자신의 단례 대상의 복사본을 실례화하는 것을 막고 모든 대상이 유일한 실례에 접근하도록 확보한다

  • 4
  • 유연성은 클래스가 실례화 과정을 통제하기 때문에 클래스는 실례화 과정을 유연하게 변경할 수 있다

  • 결점


    4
  • 비용은 비록 매우 적지만 대상이 인용을 요청할 때마다 클래스의 실례가 존재하는지 확인하려면 여전히 약간의 비용이 필요하다.정적 초기화를 사용하여 이 문제를 해결할 수 있습니다

  • 4
  • 단례 대상(특히 라이브러리에서 정의된 대상)을 혼동할 수 있는 개발은 개발자가 new 키워드 실례화 대상을 사용할 수 없다는 것을 기억해야 한다.라이브러리 코드에 접근할 수 없기 때문에, 응용 프로그램 개발자는 의외로 자신이 이런 것을 직접 실례화할 수 없다는 것을 발견할 수 있습니다

  • 4
  • 대상의 생존 기간은 단일 대상을 삭제하는 문제를 해결할 수 없다

  • OC 버전의 단일 예

    @implementation SingletonManager
    + (instancetype)sharedManager {
        static SingletonManager * singleton = nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            singleton = [[self alloc] init];
        });
        return singleton;
    }
    @end
    

    GCD에서 dispatch 사용once_t는 안에 있는 코드가 한 번만 호출되는 것을 보장하여 단일 라인의 안전을 보장할 수 있다.

    Swift 에디션 예제

    /*!
       ,    
     */
    class Singleton {
        static let singleton =  Singleton() // “    ”           dispatch_once  
        private init(){}
    }
    

    혹은
    class SingletonManager: NSObject {
         static let singleton = SingletonManager()
         private override init() {
         }
    }
    

    애플은 이 초기화 포장을 swiftonce_block_그것의 유일성을 보장하기 위해 invoke 중.또한, 우리는 이 유형에 기본적인 공개 초기화 방법을 덮어쓰는 개인적인 초기화 방법을 추가했습니다. 이것은 프로젝트의 다른 곳에서 init를 통해 자신의 MyManager 실례를 생성할 수 없게 하고, 유형 단례의 유일성을 보장합니다.

    좋은 웹페이지 즐겨찾기