如何在IOS中停止呼叫循环功能

时间:2013-07-03 07:10:46

标签: iphone ios objective-c nsthread

我想在View disapear时停止调用循环函数。我怎样才能做到这一点?这是我的代码:

    -(void) viewWillAppear:(BOOL)animated
{
    [self performSelectorInBackground:@selector(updateArray)  withObject:nil];

}

并且:

    -(void)updateArray
{

while (1)
{
    NSLog(@"IN LOOP");
   [NSThread sleepForTimeInterval:2.0];
....}

当此视图消失时,通常会调用updateArray。我想停止调用updateArray函数

提前致谢

4 个答案:

答案 0 :(得分:2)

制作BOOL iVar或属性

BOOL loopShouldRun;
viewWillAppear中的

将其设置为YES

然后使用此代码

-(void)updateArray
{
  while (loopShouldRun)
    {
      NSLog(@"IN LOOP");
      [NSThread sleepForTimeInterval:2.0];
....}
}

并在viewWillDisappear中将其设置为NO。

但正如@Michael Deuterman在评论中提到的,当sleepTimer激活之前视图消失时可能会出现问题。

所以继承人是NSTimer的另一个解决方案。

  • 创建NSTimer iVar / @属性:@property (strong) NSTimer *timer;
  • viewWillAppear中创建计时器:

    timer = [NSTimer timerWithTimeInterval:2.0 invocation:@selector(updateArray) repeats:Yes]

  • viewWillDiappear中的
  • 使计时器无效:

    if ([self.timer isValid]) { [self.timer invalidate] }

你的updateArray应该看起来像这样:

-(void)updateArray {
  NSLog(@"in loop");
}

答案 1 :(得分:0)

while (1)
{
    NSLog(@"IN LOOP");
   [NSThread sleepForTimeInterval:2.0];
}

而(1)永远是真的。要停止它,你需要有一个阻止循环发生的条件。

例如,

while (1)
{
    NSLog(@"IN LOOP");
   [NSThread sleepForTimeInterval:2.0];
   if(something happens)
    break;
}

希望它对你有所帮助。

答案 2 :(得分:0)

这是一个简单的逻辑...只需取一个标志变量并在viewdisapper然后

更新该标志varibale的值
 - (void)viewWillDisappear:(BOOL)animated 

上面的方法方法将在视图消失之前调用

viewDidDisappear:(BOOL)animated

以上方法也在那里。在您的视图消失后立即调用

所以你可以在上面的方法之一中改变你的标志变量的值。然后根据你的标志变量值,只需将break放入你的while循环中,你的循环就会破坏

答案 3 :(得分:0)

使用NSThread代替performSelector

NSThread *myThread; // preferable to declare in class category in .m file or in .h file

viewWillAppear

myThread = [[NSThread alloc] initWithTarget:self selector:@selector(updateArray) object:nil];
[myThread start];

viewWillDisappear

[myThread cancel]; // This will stop the thread and method will get stopped from execution
myThread = nil; // Release and nil object as we are re-initializing in viewWillAppear

有关详细信息,请参阅:NSThread Class Reference