iOS - 엄격한 단일 설계 모드
단일 모드 소개
단일 모드의 응용 장면
단일 모드의 관건
단례 모델의 분석과 실현
id instance; // , ,
+ (instancetype)allocWithZone:(struct _NSZone *)zone {
// if , ,
if (instance == nil) {
// :
@synchronized(self) {
if (instance == nil) {
instance = [super allocWithZone:zone]; // super ,
}
}
// :GCD
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [super allocWithZone:zone]; // super ,
});
}
return instance;
}
Tools *tools = [Tools sharedTools];
UserTool *userTool = [UserTool defaultUserTool];
실현은 다음과 같다. // : shared + default +
+ (instancetype)sharedTools {
if (instance == nil) {
instance = [self alloc] init]; // allocWithZone
}
return instance;
}
id instance;
를 정의하여 우리가 만든 단일 대상을 저장합니다. 그러나 다른 파일에서 extern 키워드를 사용하면 이 대상을 얻을 수 있고 이 대상을 소각할 수 있습니다. 예를 들어 extern id instance;
instance = nil;
이렇게 해서다음에 단일 대상을 가져올 때 nil로 다시 만들 대상을 발견합니다. 즉 2차 창설 대상입니다. 또한 단일 모드가 아닙니다. 단일 대상의 소각을 방지하기 위해서 우리는 static 수식을 사용하여 단일 대상의 변수를 저장해야 합니다. 변수의 역할 영역을 이 파일로 사용할 수 있도록 제한해야 합니다. 그러면 다른 파일 (다른 클래스) 은 이 대상을 가져올 수 없고 단일 대상은 방출되지 않습니다.id instance;
를 static id instance;
엄격한 단일 패턴
- (id)copyWithZone:(NSZone *)zone {
return instance;
}
- (id)mutableCopyWithZone:(NSZone *)zone {
return instance;
}
이렇게 엄격한 단일 예제 디자인 모델이 완성되었으니 아래에 전체 코드를 첨부합니다.
#import "Tools.h"
@implementation Tools
static id instance;
+ (instancetype)sharedTools {
if (instance == nil) {
instance = [[self alloc] init];
}
return instance;
}
+ (instancetype)allocWithZone:(struct _NSZone *)zone {
// if , ,
if (instance == nil) {
// :
@synchronized(self) {
if (instance == nil) {
instance = [super allocWithZone:zone]; // super ,
}
}
// :GCD
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [super allocWithZone:zone]; // super ,
});
}
return instance;
}
// NSCopying
- (id)copyWithZone:(NSZone *)zone {
return instance;
}
// NSMutableCopying
- (id)mutableCopyWithZone:(NSZone *)zone {
return instance;
}
@end
참고 문장
http://lib.csdn.net/article/ios/35938
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.