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 {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...
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];
}
- (void)onTimer:(NSTimer *)timer {Ta da. Now I see how this works, and userInfo has a type of (id) meaning it can be anything.
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];
}
댓글