예전에 Objective-C에서 Singleton 객체를 만드는 방법에 대해 써놓은 글(http://b4you.net/blog/210)이 있었는데 사용하다보니 몇 가지 제약이 있어 새로 만들어 보았습니다.

문제는 singleton 클래스를 하나 만들어 두고 그 클래스를 상속받으면 하위 클래스도 singleton 객체가 되게끔 하려고 하는데 여기서 여러 클래스가 상속을 받게 되면 static 객체를 공유한다는 것이었습니다.
각 객체마다 static 영역이 있어서 공유되는게 당연한데 상속 구조를 고려하지 않고 구현을 해놓은 바람에 귀찮은 문제가 발생하더군요. 이러한 것들은 C++이야 template를 사용하여 처리하면 되는데 Objective-C는 그렇게 되질 않아 다음과 같이 수정하였습니다.

+ (SingletonClass *)sharedSingletonClass
{
	static NSMutableDictionary *dictionary = nil;
	id sharedObject = nil;
	NSString *className;
	
	// for DCL
	if(dictionary == nil)
	{
		@synchronized(self)
		{
			if(dictionary == nil)
			{
				dictionary = [[NSMutableDictionary alloc] init];
			}
		}
	}
	
	className = NSStringFromClass([self class]);
	
	sharedObject = [dictionary objectForKey:className];

	// for DCL
	if(sharedObject == nil)
	{
		@synchronized(self)
		{
			sharedObject = [dictionary objectForKey:className];
			
			if(sharedObject == nil)
			{
				sharedObject = [[[self class] alloc] init];
				[dictionary setObject:sharedObject forKey:className];
			}
		}
	}
	
	return sharedObject;
}

달라진 부분은 NSDictionary를 사용한 점 입니다. 이렇게 처리하면 dictionary 내에서 search 할 때의 속도 때문에 overhead가 발생하긴 하겠지만, 상속 구조에서도 깔끔하게 잘 사용할 수 있습니다.

아직까진 다른 문제점은 없었으나 문제가 발생하면 3탄을 만들어야겠군요 ㅎㅎ
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 장현준

2010/09/24 00:05 2010/09/24 00:05
Response
8 Trackbacks , No Comment
RSS :
http://b4you.net/blog/rss/response/257

Trackback URL : http://b4you.net/blog/trackback/257

Trackbacks List

  1. 888Sport

    Tracked from 888Sport 2015/04/13 11:07 Delete

    프로가 되자.

  2. Interior Car Lights

    Tracked from Interior Car Lights 2016/03/12 21:55 Delete

    프로가 되자.

  3. Doctor Joseph Chikelue Obi

    Tracked from Doctor Joseph Chikelue Obi 2016/07/31 06:39 Delete

    프로가 되자.

  4. como conseguir seguidores en linkedin

    Tracked from como conseguir seguidores en linkedin 2016/09/28 15:10 Delete

    프로가 되자.

  5. data cente equipment recycling

    Tracked from data cente equipment recycling 2017/04/09 19:08 Delete

    프로가 되자.

  6. data cente equipment recycling

    Tracked from data cente equipment recycling 2017/04/09 19:08 Delete

    프로가 되자.

  7. Shure BLX Wireless Microphone Systems

    Tracked from Shure BLX Wireless Microphone Systems 2017/05/24 15:37 Delete

    프로가 되자.

  8. Shure BLX Wireless Microphone Systems

    Tracked from Shure BLX Wireless Microphone Systems 2017/05/24 15:38 Delete

    프로가 되자.

« Previous : 1 : ... 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10 : 11 : ... 246 : Next »

블로그 이미지

빗소리를 먹는 사람.

- 장현준

Notices

Archives

Authors

  1. 장현준

Recent Trackbacks

Calendar

«   2017/12   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

Site Stats

Total hits:
2084512
Today:
4356
Yesterday:
5115