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文件?
停止计时器的正确方法是调用其invalidate方法.
废止
阻止接收器再次发射并请求将其从运行循环中移除.
在您的情况下,您可以存储timer2在班级的ivar中,然后invalidate在适当的时刻发送,即,当您显示第二个笔尖时(如果我没有错).如你所见,不这样做将使计时器永远运行.
如果设置repeats为NO,则第一次触发后计时器将自动失效:
重复
如果是,则计时器将反复重新安排自己,直到无效.如果为NO,计时器将在其触发后失效.