나는 싱글 톤이 악하다고 분명히 동의하지 않습니다. 때로는 너무 많이 사용되는 경우도 있지만 때로는 업무에 적합하기도합니다. 일부 응용 프로그램에서는 일종의 일반 데이터 관리자를 사용하는 것이 좋습니다. 싱글 톤 패턴은 SDK 자체 (앱 대리자, 공유 관리자, 기본 센터 등)에서 광범위하게 사용됩니다. 대부분 공유 인스턴스에 액세스 할 수 있지만 필요에 따라 새 인스턴스를 만들 수 있기 때문에 이러한 인스턴스는 "순수한"단일 인스턴스가 아닙니다.
언제든지 어디에서든지 데이터 관리자의 단일 인스턴스에 액세스하는 것이 유용 할 것인지 여부를 묻는 질문이 필요합니다. 그렇지 않은 경우에는 아마도 싱글 톤이 필요하지 않을 것입니다. 그러나 멀티 스레드 환경에서 싱글 톤을 사용하려는 경우 경쟁 조건 (한 스레드가 다른 스레드가 리소스에 액세스하는 동안 리소스를 수정할 수 있는지)에 대해 걱정할 필요가 있습니다. 설명서에는 코코아에서이를 달성하는 최선의 방법에 대한 좋은 설명이 있습니다 .
예를 들어 설명해 보겠습니다. 제가 작성한 게임의 일부 코드를 사용하고 있습니다. GameMap
클래스와 Tile
클래스가 있다고 가정 해 보겠습니다. GameMap
은 Tile
개체의 2 차원 눈금을 나타냅니다.
GameMap *gameMap = [[GameMap alloc] init];
NSArray *theTiles = gameMap.tiles;
GameMap
의 인스턴스는 타일의 그리드를 소유, 게임 맵을 만들 때 타일을 만듭니다. 싱글 톤은 필요하지 않습니다.
"하지만 한 번에 GameMap
개가 있습니다. 큰 차이가 있습니까?"라고 말할 수 있습니다. 저장된 게임을로드하거나 새로운 레벨을로드하는 것은 어떻습니까? 글쎄 그것은 다음과 같이 쉽게됩니다 :
// In whatever class object owns the game map
self.gameMap = [[GameMap alloc] initWithSaveData:saveData];
결론적으로, 사물의 다른 인스턴스를 관리하는 코드가있는 인스턴스를 생성하십시오. 최대한 글로벌 화를 유지하면 코드의 확장 성 및 유지 관리가 향상됩니다.
아니요, 나쁘지 않습니다. 전혀 나쁘지 않습니다. Apple에서 제공하는 여러 iOS SDK 클래스는 싱글 톤으로 구현됩니다. Apple 코드가 자동으로 좋은 코드라는 것을 말하는 것은 아니지만, 싱글 톤 패턴이 자질을 되찾지 않는 것이 아니라는 것을 강하게 암시합니다. – aroth