티스토리 뷰

iOS/자료정리

[iPhone]NSTimer 사용하기.

썩소천사 2011. 11. 25. 16:29
반응형


NSTimer는 전역으로 설정해주는 것이 나중에 관리할 때 문제가 없기 때문에 전역으로 설정해서 쓰는 편이다.
아니면 "Timer = "이 부분을 제외하고 써줘도 문제는 없으나 객체(view)가 dealloc 되더라도 타이머를 죽이지 않으면 실행되기 때문에 방어 코드가 필히 들어가야 한다. 

//타이머 생성
timer = [NSTimer scheduledTimerWithTimeInterval:1.0f 
                                                          target:self 
                                                        selector:@selector(timerMethod) 
                                                        userInfo:nil 
                                                         repeats:YES];

//타이머 해제
if (timer != nil) {
     [timer invalidate];
     timer = nil;  
}

//활용
 - 타이머 userInfo에 값을 할당하여 전달 할 수도있는데 함수에서 -(void)timerMethod:(NSTimer *)timer 로 타이머 객체를 받아
timer.userInfo 로 접근하여 값을 변환해 쓰면 된다.

//유사
타이머로 1회 호출할 거라면 타이머를 쓰지 않고 아래 함수를 쓰는게 더 편하다. withObject 에는 해당 함수에 필요한 내용을 만들어서 테스트하는 용도나 개발할 때 view에 여러번 진입해야 할 경우 init에서 다음 화면을 부를 함수를 호출시켜 작업하고있는 view까지 이동시킬 때 자주 사용하고 있다. 또는 LocalNotification을 통해 진입했을 때 사용하면 편리하다.

[self performSelector:@selector(timerMethod:) withObject:@"1" afterDelay:0.1];

performSelector의 해지는 아래코드를 호출해 주면 된다.

[NSObject cancelPreviousPerformRequestsWithTarget:self];


//주의 
 - 타이머 하나에 해지되지 않은 타이머를 계속해서 할당할 경우 기존에 있던 타이머들은 관리할 수 없게 되므로 기존 타이머를 지우고 다시 할당을 해야한다.
 - 객체(view)를 지울경우 타이머가 살아있다면 해당 view객체의 dealloc 함수는 호출되지 않는 문제가 발생한다.

//???
//타이머 객채를 전역으로 alloc init 설정한 것과 안했을 때의 차이점.....을 테스트 해봐야 할듯. 나는 안하고 썼기에..


반응형

'iOS > 자료정리' 카테고리의 다른 글

[iPhone]CADisplayLink  (0) 2012.05.09
property (synthesize, setter/getter) 개념정리.  (0) 2012.03.23
[iOS]앱에서 다른앱 실행하기.  (0) 2011.10.27
[iPhone]NSNumberFormatter  (0) 2011.08.17
[iPhone] 유용한 게시글 정리하기  (0) 2011.08.12
댓글
반응형