我有这段代码:
- (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,并再次调用它(因为如果我经常触摸屏应用程序崩溃)。 你能救我吗?
答案 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]];
}