为什么应用会冻结“for”循环?

时间:2011-11-22 13:22:32

标签: objective-c cocoa

为什么这个循环会冻结GUI?我该如何解决这个问题?

 -(void)freeze {

      for(int i=0; i<10000; i++) {

          NSLog(@"write!");
      }
 }

如果我用IBAction(按钮)调用此循环,按钮和所有应用程序冻结按下它。循环完成后,一切正常。我该怎么办?

2 个答案:

答案 0 :(得分:5)

您可以使用队列来避免阻止GUI,例如:

queue=dispatch_queue_create("my.queue", NULL);
dispatch_async(queue, ^{
    //do blocking stuff here
});

答案 1 :(得分:3)

将方法更改为

-(void)freeze:(id)sender {
    for(int i=0; i<10000; i++) { 
        NSLog(@"write!");
    }
}

现在这样称呼:

[self performSelectorInBackground:@selector(freeze:) withObject:nil];