싱글 톤에 대해 배우기 위해 한 가지 예를 따르지만 코드와 혼동되지 않습니다. 특히 정적 변수를 사용하는 경우에는 혼란 스럽습니다. 다음은 코드입니다. 첫 번째 변수가 초기화 된 코드인지 확인합니다.정적 변수를 초기화 한 후 nil을 가리키지 않는 이유는 무엇입니까?
+ (instancetype)sharedStore
{
static BNRImageStore *sharedStore = nil;
if (!sharedStore) {
sharedStore = [[self alloc] initPrivate];
}
return sharedStore;
}
은 처음의 initPrivate 인 경우 : 메소드가 호출됩니다 :
- (instancetype)initPrivate
{
self = [super init];
if (self) {
_dictionary = [[NSMutableDictionary alloc] init];
}
return self;
}
내가 코드의 첫 번째 부분에 문제가있는, sharedStore로 : 방법. 이 변수 sharedStore가 데이터를 유지할 수있는 방법은 매번이 메소드를 호출하여 singleton을 얻거나 sharedStore가 nil을 가리 키도록하는 경우입니다.
코드가 올바르게 작동하므로 문제가 없습니다. 변수가 정적이면 static BNRImageStore *sharedStore = nil;
은 무시됩니다.
미리 감사드립니다. 위의 코드는 "IOS 프로그래밍 : The BNR Guide"라는 책에서 가져온 것입니다.
감사의 특별한 경우이다. 그것은 BNRImageStore * sharedStore = someOtherBNRImageStoreVariable을 의미합니까? 아무 것도 변하지 않을거야. –
음 ... 당신이 코멘트에서 묻고있는 것에 대해 100 %는 안된다. 일반적으로 NSMutableDictionary의 경우 공유 저장소와 같은 객체는 백킹 객체와 비슷하며 액세스하거나 추가 할 수있는 메소드를 제공합니다. 그래서 보통 [[BNRImageStore sharedInstance] addObect : obj forKey : key]와 비슷합니다; 또는 그런 것. – timpone
우리가 sharedStore 포인터가 nil을 가리킬 때 내 질문은 이전에 가리키고 있던 데이터의 메모리 주소를 잃어 버리지 않는다는 것을 의미하지 않는다. –