1

我有这个代码:

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

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

point =[touch locationInView:imageView];

[self openImages];
}

每次我触摸屏幕时,它都会调用“openImages”方法;

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

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

4

1 回答 1

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]];
}
于 2012-02-08T11:37:23.387 回答