그래서 싱글 톤과 임 두 사람 구현의 차이점을 이해하려고 노력하고 있습니다. 기능적으로 두 코드 모두 실행하려고 시도했지만 모두 작동합니다.객관적인 C에서 스레드 안전 이니셜 라이저의 두 구현 사이의 차이
그러나 첫 번째 구현에서는 [자체 할당]이 호출되지 않고 [슈퍼 할당]이 호출됨을 알았습니다. 이것으로 조금은 당황 스럽네요. 작동하는 것 같다하지만 누군가가
첫번째 방법으로 명확하게 할 수있는 경우 임 궁금 그래서 조금 마법 보인다 [super alloc]
대 [self alloc]
클래스하지 않는 한 차이가 없습니다 사용
+(id)getSingleton
{
static dispatch_once_t pred;
dispatch_once(&pred, ^{
locMgrSingleton = [[super alloc] init];
});
return locMgrSingleton;
}
또 다른 방법
+(id)getSingleton
{
@synchronized(self)
{
if (locMgrSingleton == nil)
{
locMgrSingleton = [[self alloc]init];
NSLog(@"Created a new locMgrSingleton");
}
else
{
NSLog(@"locMgrSingleton exists");
}
}
return locMgrSingleton;
}
첫 번째 것은'self alloc'을 사용해야합니다. – rmaddy
동기화 메커니즘의 차이점이나'[self alloc]'과'[super alloc] '의 차이점에 대해 묻고 있습니까? 두 번째로, 이것은 도움이 될 수 있습니다 : (allocWithZone :와 싱글 톤 만들기 (http://stackoverflow.com/q/11962913) (여러분이'alloc'을 오버라이드했다고 가정 할 때). –