Iphone 如何释放具有NStimer工作的对象
我不想在[myview发行版]之前编写类似“myview.timer invalidate”的代码。 但如果计时器工作,我不能释放myview,因为计时器保留myview。 我该怎么办 我想使类“myview”变得简单,只需调用[myview init]和[myview release] myview.h myview.m contrllor.m 使计时器失效 当无效时,它将释放目标 添加到视图类:Iphone 如何释放具有NStimer工作的对象,iphone,objective-c,Iphone,Objective C,我不想在[myview发行版]之前编写类似“myview.timer invalidate”的代码。 但如果计时器工作,我不能释放myview,因为计时器保留myview。 我该怎么办 我想使类“myview”变得简单,只需调用[myview init]和[myview release] myview.h myview.m contrllor.m 使计时器失效 当无效时,它将释放目标 添加到视图类: -(void)stop { [self.timer invalidate]; s
-(void)stop
{
[self.timer invalidate];
self.timer = nil;
}
从您的
releaseMyView
方法中首先调用它<代码>[myView停止]代码>您可以使用类似dispose方法的方法。
您的控制器代码如下所示:
- (IBAction)releaseMyView {
[myView removeFromSuperview];
[myView dispose];
[myView release];
}
和dispose方法将使计时器无效。这段代码非常明显,所以您可以在dispose方法中执行其他清理
另一种方法是,若视图仍然具有superview,则可以签入doAction方法。如果没有-使计时器无效。重复计时器保留其目标。因此,如果使用重复计时器,则必须使其失效,且失效位置不得为
dealloc
<除非使计时器无效,否则不会调用代码>解除锁定。这就是NSTimer
的设计方式。由于您有一个start
方法,如果您正在寻找更可读的代码,您可以编写一个stop
方法,该方法将使计时器无效。逻辑很简单:如果你已经开始,你需要停止
另一个选项是使用不同的对象作为计时器的目标,而不是self
。然后,您可以在dealloc
中使计时器无效。但这可能不值得付出努力 我想让类“myview”成为示例,只需调用[myview init]和[myview release]
- (void)viewDidLoad {
MyView *my_view = [[MyView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)];
self.myView = my_view;
[my_view release];
[myView start];
[self.view addSubview:myView];
[super viewDidLoad];
}
- (IBAction)releaseMyView {
[myView removeFromSuperview];
[myView release];
}
-(void)stop
{
[self.timer invalidate];
self.timer = nil;
}
- (IBAction)releaseMyView {
[myView removeFromSuperview];
[myView dispose];
[myView release];
}