본문 바로가기
아이폰 개발/ios 개념&튜토리얼

디자인 패턴 - 싱글톤 패턴 예제

by 인생여희 2021. 1. 28.

디자인 패턴 - 싱글톤 패턴 예제

 

 

 

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";
 

 

 

CommonClass.zip
0.00MB

 

 

 

참고 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