투케이2K

32. (Objective-C/objc) NSTimer 타이머 사용해 실시간 카운트 수행 실시 본문

Objective-C

32. (Objective-C/objc) NSTimer 타이머 사용해 실시간 카운트 수행 실시

투케이2K 2022. 3. 8. 08:25

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : OBJECTIVE-C

 

[ViewController.m 파일]

#import "ViewController.h"



// MARK: - [Private 변수 선언 영역]
@interface ViewController (){
    NSTimer *timerRepeat; // [타이머 객체]
    int timerCount; // [타이머 카운트]
}
@end



// MARK: - [몸체 (구현부) 동작 작성]
@implementation ViewController



// MARK: - [클래스 설명]
/*
// -----------------------------------------
1. ViewController (구현부)
2. ios 13 이상 사용 : API_AVAILABLE(ios(13.0))
// -----------------------------------------
*/



// MARK: - [뷰 로드 실시]
- (void)viewDidLoad {
    [super viewDidLoad];
    printf("\n");
    printf("=============================== \n");
    printf("[ViewController >> viewDidLoad() :: 뷰 로드 실시] \n");
    printf("=============================== \n");
    printf("\n");
    
    
    // MARK: [타이머 동작 수행 메소드 호출]
    [self startTimer];
}



// MARK: - [뷰 로드 완료]
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    printf("\n");
    printf("=============================== \n");
    printf("[ViewController >> viewWillAppear() :: 뷰 로드 완료] \n");
    printf("=============================== \n");
    printf("\n");
}



// MARK: - [뷰 화면 표시]
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    printf("\n");
    printf("=============================== \n");
    printf("[ViewController >> viewDidAppear() :: 뷰 화면 표시] \n");
    printf("=============================== \n");
    printf("\n");
}



// MARK: - [뷰 정지 상태]
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    printf("\n");
    printf("=============================== \n");
    printf("[ViewController >> viewWillDisappear() :: 뷰 정지 상태] \n");
    printf("=============================== \n");
    printf("\n");
}



// MARK: - [뷰 종료 상태]
- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    printf("\n");
    printf("=============================== \n");
    printf("[ViewController >> viewDidDisappear() :: 뷰 종료 상태] \n");
    printf("=============================== \n");
    printf("\n");
}



// MARK: - [타이머 시작 메소드 선언 실시]
- (void)startTimer {
    printf("\n");
    printf("=============================== \n");
    printf("[ViewController >> startTimer() :: 타이머 시작 실시] \n");
    printf("=============================== \n");
    printf("\n");
    
    // [사전 이미 타이머가 동작 중인 경우 종료 실시]
    [self stopTimer];
    
    
    // [사전 변수값 초기화 수행 실시]
    timerCount = 1;
    
    
    // [타이머 객체 생성 수행 실시 : 1초 마다 반복 수행 실시 : 타이머 동작 콜백 메소드 (timerCallback)]
    timerRepeat = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(timerCallback:) userInfo:nil repeats:YES];
}



// MARK: - [타이머 실시간 동작 수행 부분]
-(void)timerCallback:(NSTimer*)timer {
    printf("\n");
    printf("=============================== \n");
    printf("[ViewController >> timerCallback() :: 실시간 타이머 동작 수행] \n");
    printf("[카운트 :: %d] \n", timerCount);
    printf("=============================== \n");
    printf("\n");
    
    // [특정 카운트 값이 된 경우 타이머 종료 실시]
    if (timerCount != nil && timerCount >= 5){
        printf("\n");
        printf("=============================== \n");
        printf("[ViewController >> timerCallback() :: 실시간 타이머 동작 종료] \n");
        printf("=============================== \n");
        printf("\n");
        
        
        // [타이머 종료 호출 실시]
        [self stopTimer];
    }
    
    // [특정 로직 처리 실시]
    
    
    // [타이머 카운트 값 증가 실시]
    timerCount ++;
}



// MARK: - [타이머 종료 메소드 선언 실시]
- (void)stopTimer {
    printf("\n");
    printf("=============================== \n");
    printf("[ViewController >> stopTimer() :: 타이머 종료 실시] \n");
    printf("=============================== \n");
    printf("\n");
    
    // [사전 타이머 객체가 널이 아닌지 확인 후 종료]
    if (timerRepeat != nil && [timerRepeat isValid]){ // [타이머가 널이 아니고 , 동작 중인 경우]
        [timerRepeat invalidate]; // [타이머 동작 종료]
        timerRepeat = nil; // [타이머 객체 널 만듦]
    }
    
    
    // [변수값 초기화 수행 실시]
    timerCount = 1;
}


// -----------------------------------------
@end
// -----------------------------------------
 

[결과 출력]


반응형
Comments