타이머 선언

타이머 ID를 여러 개 선언해서 동시에 여러 개의 타이머를 돌리는 것도 가능하다.

NSTimer *timer;
NSString *str = @"Timer";
timer = [NSTimer scheduledTimerWithTimeInterval:60.0 target:self
                                           selector:@selector(updateMethod:) userInfo:str repeats:YES];


콜백 함수

- (void) updateMethod:(NSTimer *)incomingTimer
{
    NSLog(@"Inside update method");
    if ([incomingTimer userInfo] != nil)
        NSLog(@"userInfo: %@", [incomingTimer userInfo]);
}


아래와 같이 다중 타이머 선언 시 selector를 이용하여 각 타이머 별로 다중 작업이 가능하다

    NSTimer *locktimer;
    NSTimer *policytimer;
    NSString *lockstr = @"DeviceLock Timer";
    NSString *policystr = @"Policy Timer";
    
    locktimer = [NSTimer scheduledTimerWithTimeInterval:30.0 target:self
                                           selector:@selector(updateDeviceLockInfo:) userInfo:lockstr repeats:YES];
    
    policytimer = [NSTimer scheduledTimerWithTimeInterval:60.0 target:self
                                           selector:@selector(updatePolicyInfo:) userInfo:policystr repeats:YES];
- (void) updatePolicyInfo:(NSTimer *)incomingTimer
{
    NSLog(@"Inside updatePolicyInfo method");
    if ([incomingTimer userInfo] != nil)
        NSLog(@"userInfo: %@", [incomingTimer userInfo]);
}
- (void) updateDeviceLockInfo:(NSTimer *)incomingTimer
{
    NSLog(@"Inside updateDeviceLockInfo method");
    if ([incomingTimer userInfo] != nil)
        NSLog(@"userInfo: %@", [incomingTimer userInfo]);
}


앱 개발 시에 Singleton 패턴 이라는 이야기를 자주 듣게 되는데 널리 쓰이는 만큼 한번 배워 놓으면 써먹을 데가 많다.

위키 백과에서의 싱글톤 패턴에 대한 정의는 아래와 같다.

소프트웨어 디자인 패턴에서 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 
생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 
최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글턴 패턴이라고 한다.


쉽게 생각해서 여러 클래스에서 공통적으로 자주 쓰이는 인스턴스들을 필요할 때마다 

매번 초기화 할 필요 없이 한번 초기화 된 인스턴스를 불러온다는 것이다.

필요할 때마다 매번 인스턴스를 생성한다는 것은 시스템 자원의 낭비를 가져온다.


예제를 하나 들자면 아래 내용은 실제 네트워크를 통해 앱에서 Database에 엑세스 할때 주로 사용하였다.

Singleton.h 헤더 파일
@interface Singleton : NSObject

+ (NSString *) getBaseURL;
+ (NSString *) getProfileImageBaseURL;

@end

Singleton.m 구현 파일 @implementation Singleton + (NSString *) getBaseURL { static NSString * const BaseURLString = @"http://서버 주소"; return BaseURLString; } + (NSString *) getProfileImageBaseURL { static NSString * const BaseURLString = @"http://이미지 파일이 저장된 서버 주소"; return BaseURLString; } @end

이렇게 자주 쓰일 URL을 미리 선언 해 놓은 후


싱글톤 패턴 활용
#import "Singleton.h"

NSString *urlStr = [NSString stringWithFormat:@"%@/login_check.php",[Singleton getBaseURL]];
NSString *imageurlStr = [NSString stringWithFormat:@"%@/get_image.php",[Singleton getProfileImageBaseURL]];

이런 식으로 필요할 때마다 불러와서 사용하면 된다.


만약에 싱글톤 패턴을 사용하지 않고 필요할 때마다 인스턴스를 만들어서 사용을 한다면

기존 URL 값이 바뀌어야만 하는 상황이 생겼을 때 생성했던 모든 인스턴스를 찾아서 

각각 수정해줘야 하기 때문에 효율성 측면에서 추천하지 않는 방법이다.


'프로그래밍 > iOS - OBJC' 카테고리의 다른 글

iOS NSTimer 호출하기  (1) 2016.05.12
맥 OS X PhoneGap 설치  (0) 2016.04.27
iOS에서 위치정보 사용 동의 받기  (0) 2016.03.10
iOS 8에서 푸시 알림 동의 받기  (0) 2016.03.10
iOS 앱 자동로그인  (0) 2016.03.09

프로젝트 진행 중에 처음에는 없던 자동로그인 기능 구현이 결정되었다.

최대한 간단하게 구현하려고 노력했으며 실제로 그렇게 되었다고 본다.


바로 NSUserDefaults 를 이용한 방법인데 LoginState, Autologin 이라는 NSUserDefault를 선언하고

LoginState는 YES/NO 값을 가지고 ID와 PW를 스트링으로 저장하여 다음 앱 실행 시 활용하였다.


앱 메인에 로그인 유지를 선택 할 수 있는 체크박스를 만들어 놓은 후

if (autoLoginChecked) { // 자동로그인 체크 NSUserDefaults *autologin = [NSUserDefaults standardUserDefaults]; [autologin setObject:@"yes" forKey:@"loginstate"]; // 자동로그인 State를 yes로 저장 [autologin setObject:userID.text forKey:@"userid"]; // User ID 필드 값 저장 [autologin setObject:userPass.text forKey:@"pass"]; // User PW 필드 값 저장 [autologin synchronize]; }

이렇게 설정을 해 놓은 후 다음 앱 실행 시 loginstate 의 키 값이 yes냐 no냐에 따라서 분기를 주면 된다.

사용자 로그아웃 시에는 loginstate를 no로 바꾸고 synchronize를 해주면 간단하다.


'프로그래밍 > iOS - OBJC' 카테고리의 다른 글

iOS NSTimer 호출하기  (1) 2016.05.12
맥 OS X PhoneGap 설치  (0) 2016.04.27
iOS에서 위치정보 사용 동의 받기  (0) 2016.03.10
iOS 8에서 푸시 알림 동의 받기  (0) 2016.03.10
Singleton 패턴 사용하기  (0) 2016.03.09

+ Recent posts