如果它的重复属性等于YES,我应该释放NSTimer吗?

Ton*_*Nam 0 iphone cocoa-touch release objective-c ios

有时我会在不释放物体时感到困惑.我有:

NSTimer *timer2;

timer2 = [NSTimer scheduledTimerWithTimeInterval: (5)
                                         target: self
                                       selector: @selector(someMethod:)
                                       userInfo: nil
                                        repeats: YES];
Run Code Online (Sandbox Code Playgroud)

并且每五秒执行一次的方法是:

-(void) someMethod:(NSTimer*)theTimer
{
   NSLog(@"code got executed");
}
Run Code Online (Sandbox Code Playgroud)

我有另一种方法,在我的根视图控制器上放置另一个nib文件:

ViewControllerObjetivos *control = [ViewControllerObjetivos alloc];

[control initWithNibName:@"ViewControllerObjetivos" bundle:nil];

UINavigationController *navControl = [[UINavigationController alloc]
                                      initWithRootViewController:control];

[self presentModalViewController:navControl animated:NO]; 
[navControl setNavigationBarHidden:YES];

[control release];
[navControl release];
Run Code Online (Sandbox Code Playgroud)

当我调用最后一个方法时,新的nib文件放在根视图控制器上.而someMethod仍被调用!

所以我很困惑,如果我应该释放timer2因为我没有使用单词init或alloc也没有复制来初始化它.那么我想做什么呢?我应该停止它然后调用我显示的最后一个方法吗?或者我应该发布整个nib文件,因为我将要使用新的nib文件?

ser*_*gio 5

停止计时器的正确方法是调用其invalidate方法.

废止

阻止接收器再次发射并请求将其从运行循环中移除.

在您的情况下,您可以存储timer2在班级的ivar中,然后invalidate在适当的时刻发送,即,当您显示第二个笔尖时(如果我没有错).如你所见,不这样做将使计时器永远运行.

如果设置repeatsNO,则第一次触发后计时器将自动失效:

重复

如果是,则计时器将反复重新安排自己,直到无效.如果为NO,计时器将在其触发后失效.