iOS의 구현 단계와 구체적인 예:
1. 단일 예제 모드의 요점:
분명히 단례 모델의 요점은 세 가지가 있다.하나는 어떤 종류에 하나의 실례만 있을 수 있다.둘째, 이것은 반드시 스스로 이 실례를 만들어야 한다.셋째, 그것은 반드시 자체적으로 전체 시스템에 이 실례를 제공해야 한다.
2. 단일 예제 모드의 장점:
1.실례 제어: Singleton은 다른 대상이 자신의 Singleton 대상의 복사본을 실례화하는 것을 막아서 모든 대상이 유일한 실례에 접근할 수 있도록 합니다. 2.유연성: 클래스가 실례화 과정을 제어하기 때문에 클래스는 더욱 유연하게 실례화 과정을 수정할 수 있다.
3. IOS의 단일 예제 모드의 실현 절차
Objective-c에서 하나의 사례 클래스를 실현하려면 적어도 다음과 같은 네 가지 절차가 필요하다. 1. 사례 대상에게 정적 실례를 실현하고 초기화한 다음nil로 설정한다. 2. 하나의 실례 구조 방법을 실현하여 위에서 설명한 정적 실례가 nil인지 확인한다. 만약에 이 종류의 실례가 새로 만들어지고 되돌아온다. 3. allocWithZone 방법을 다시 쓰기.다른 사람들이 alloc와 init를 직접 사용하여 새로운 실력을 얻으려고 할 때 새로운 실례가 생기지 않도록 하기 위해서다. 4. allocWitheZone,copyWithZone,release,autorelease를 적절하게 실현한다.다음은 SurveyRunTimeData의 예입니다.
static SurveyRunTimeData *sharedObj = nil; // : , 。
@implementation SurveyRunTimeData
+ (SurveyRunTimeData*) sharedInstance // : nil
{
@synchronized (self)
{
if (sharedObj == nil)
{
[[self alloc] init];
}
}
return sharedObj;
}
+ (id) allocWithZone:(NSZone *)zone // : allocWithZone
{
@synchronized (self) {
if (sharedObj == nil) {
sharedObj = [super allocWithZone:zone];
return sharedObj;
}
}
return nil;
}
- (id) copyWithZone:(NSZone *)zone //
{
return self;
}
- (id) retain
{
return self;
}
- (unsigned) retainCount
{
return UINT_MAX;
}
- (oneway void) release
{
}
- (id) autorelease
{
return self;
}
- (id)init
{
@synchronized(self) {
[super init];// .
return self;
}
}
@end