디자인 패턴 - 싱글톤 패턴 예제
CommonUtil.h
#import <Foundation/Foundation.h>
@interface CommonUtil : NSObject{
}
+(CommonUtil *)sharedObject;
@property NSString * commonstring;
@end
CommonUtil.m
#import "CommonUtil.h"
@implementation CommonUtil
+ (CommonUtil *)sharedObject{
NSLog(@"sharedObject 호출 ");
static CommonUtil *commonUtil = nil;
/*
dispatch_once_t는 dispatch_once가 실행되었는지 여부를 저장하고 있는 포인터 변수.
이 값을 보존하지 못한다면 여러번 실행될 수 있음.
최초값 : 0
*/
static dispatch_once_t onceToken;
/*
최초로 실행될때 onceToken에 값이 들어간다.
값이 0 일때만 한 번 실행된다. 이후 값이 존재할때는 아래 로직 실행안됨.
*/
dispatch_once(&onceToken, ^{
commonUtil = [[self alloc]init];
});
return commonUtil;
}
/*
참고
dispatch_once 는 단 1회만 실행한다는 것을 보장하며 완벽히 synchronous 하게 동작한다. 따라서 Thead-Safe 함을 보장받을 수 있다.
sharedObject 가 처음 호출되면 commonUtil 변수에 CommonUtil가 할당되고,
두번째 호출부터는 첫번째 호출에서 생성된 commonUtil 변수를 그대로 return 하여 어디서든 동일한 CommonUtil를 활용한 코딩을 할 수 있다.
*/
//[CommonUtil sharedObject] 호출시 init 메소드는 최초로 한번만 실행된다.
-(id)init{
NSLog(@"init 호출");
self = [super init];
if (self) {
//최초로 객체가 생성될때, 문자값 셋팅
self.commonstring = @"test!";
}
return self;
}
@end
호출
@사용법
#읽기
NSLog(@"application - text : %@" , [CommonUtil sharedObject].commonstring);
#쓰기
[CommonUtil sharedObject].commonstring = @"changed text";
참고 1 : http://monibu1548.github.io/2018/04/25/GCD-singleton/
참고 2 : https://riptutorial.com/objective-c/example/3258/singleton-class
'아이폰 개발 > ios 개념&튜토리얼' 카테고리의 다른 글
NSURLSession 공통 모듈 예제 (0) | 2021.01.29 |
---|---|
iOS 공통 로그 예제 (0) | 2021.01.28 |
iOS AVPlayer 예제 (3) | 2021.01.26 |
iOS AVAudioPlayer 예제 (0) | 2021.01.26 |
iOS AudioFileStream 예제 (0) | 2021.01.22 |