IOS:在执行中停止一个方法

时间:2012-02-08 11:26:44

标签: ios for-loop touchesbegan

我有这段代码:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

mouseSwiped = NO;
UITouch *touch = [touches anyObject];

point =[touch locationInView:imageView];

[self openImages];
}

evrytime我触摸屏它称之为“openImages”方法;

- (void) openImages{
// some code....
for(int i = 0; i < 200; i++){
        for(int j = 0; j < 200; j++){
         //some code... 
        }                 
    }
 }

那么你可以看到“openImage”是一个沉重的方法,因为有一个双循环,我打开一些uiimage(但这不是问题)。 我的问题是:我每次触摸屏时都可以做什么来阻止openImages,并再次调用它(因为如果我经常触摸屏应用程序崩溃)。 你能救我吗?

1 个答案:

答案 0 :(得分:2)

您可以使用NSOperationQueue。使openImages进入可以取消的操作。在每次触摸时,您可以从队列中获取所有“打开图像”操作,取消它们并将新操作排入队列。

详细说明:

为队列创建一个实例变量,并在执行任何操作之前对其进行初始化:

imageOperationsQueue = [NSOperationQueue new];

操作可以这样实现:

@interface OpenImagesOperation : NSOperation
@end

@implementation OpenImagesOperation

- (void)main {
    for (int i = 0; !self.isCancelled && i < 200; i++) {
        for (int j = 0; !self.isCancelled && j < 200; j++) {
            //some code...
        }
    }
}

@end

openImages方法现在看起来像

- (void)openImages {
    for (NSOperation *o in imageOperationsQueue.operations) {
        if ([o isKindOfClass:[OpenImagesOperation class]]) {
            [o cancel];
        }
    }
    [imageOperationsQueue addOperation:[OpenImagesOperation new]];
}