본문 바로가기
iPhone 개발

iPhone 개발 학습 3회 - Timer 사용하기

by GoodDev 2011. 9. 26.

1. interface  에서 정의
@interface Controller : UIViewController {
     NSTimer* _timer;
 
}
@property(nonatomic,retain) NSTimer* _timer;

 
2. implement 에서 구현
가.  타이머 생성
 
_timer = [NSTimer scheduledTimerWithTimeInterval: 1.0f target: self selector: @selector(handleTimer:) userInfo: nil repeats: NO];
1) 첫번째 파라메터 : 시간 간격 (  sec )
2) target : Event를 받을 객체
3) selector : Timeout 시 수행할 콜백함수
4) userinfo : Timer에 대한 사용자 정보 ( Timeout 이 될때 이 변수를 통해서 데이터 전송이 가능하다. )
5) repeats : 반복 여부

나.  타이머 해제
 
[tmier invalidate];

다. 콜백함수 정의
- (void)handleTimer: (NSTimer *)timer
{


3. userinfo 사용 예제 (  원본 URL :  http://www.ericd.net/2009/05/iphone-nstimer-and-that-thing-called.html  )
As I am implementing some stuff, I had reason to send along some information to a  NSTimer's "onComplete" method. Every example online I've seen recently using NSTimer sets the userInfo property to  nil. Not very useful for me to learn from. After a little banter on an email list, I understand how this thing works.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath];
UILabel *cellLabel = (UILabel *)[newCell.contentView viewWithTag:1];
[newCell setSelected:YES animated:YES];

NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init];
[myDictionary setObject:tableView forKey:@"table"];
[myDictionary setObject:indexPath forKey:@"indexPath"];
// The colon after the onTimer allows for the argument
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(onTimer:) userInfo:myDictionary repeats:NO];
[myDictionary release];
}
So the onTimer method will get called after .5 seconds and it's being sent the userInfo object containing that NSMutableDictionary. Now to use that...
- (void)onTimer:(NSTimer *)timer {
NSLog(@"--- %@", [timer userInfo] );
[[[timer userInfo] objectForKey:@"table"] deselectRowAtIndexPath:[[timer userInfo] objectForKey:@"indexPath"] animated:YES];
// I have a reference to the tableView so I can do this below
// but to show how the keys work, the call above these works
//[table deselectRowAtIndexPath:[[timer userInfo] objectForKey:@"indexPath"] animated:YES];
}
Ta da. Now I see how this works, and userInfo has a type of (id) meaning it can be anything.

댓글