2010-07-09 2 views

답변

2

가 여기에 귀하의 기본 패턴입니다 :

MyViewController.h :

... 
@interface MyViewController : UIViewController 
{ 
    ... 
    NSTimer* timer; 
    ... 
} 
... 

MyViewController.m :

... 
static const NSTimeInterval TIMER_INTERVAL = 1.0; 
... 
- (void)dealloc 
{ 
    [self stopTimer]; 
    ... 
    [super dealloc]; 
} 
... 
- (void)viewDidLoad 
{ 
    ... 
    [self startTimer]; 
    ... 
} 
... 
- (void)startTimer 
{ 
    [self stopTimer]; 

    timer = [NSTimer scheduledTimerWithTimeInterval:TIMER_INTERVAL 
              target:self 
              selector:@selector(timerCallback) 
              userInfo:nil 
              repeats:YES]; 
    [timer retain]; 
} 
... 
- (void)stopTimer 
{ 
    if (timer) 
    { 
     [timer invalidate]; 
     [timer release]; 
     timer = nil; 
    } 
} 
... 
- (void)timerCallback 
{ 
    someFunction(); 
    [self someMethod]; 
} 
+0

[자기하는 stopTimer] <- dealloc의이 줄에 대해서는 타이머가 수신기를 유지하므로 dealloc에 ​​있으면 타이머가 이미 중지되었습니다. 그렇지 않으면 ObjC의 메모리 관리 규칙을 깨야했습니다. – JustSid

관련 문제