티스토리 뷰
반응형
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 |
댓글
반응형