【问题标题】:IOS: stop a method in its executionIOS:停止执行方法
【发布时间】:2012-02-08 11:26:44
【问题描述】:

我有这个代码:

- (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,然后再调用一次(因为如果我经常触摸屏应用程序崩溃)。 你能帮帮我吗?

【问题讨论】:

    标签: ios for-loop touchesbegan


    【解决方案1】:

    您可以为此使用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]];
    }
    

    【讨论】:

    • 噢噢噢噢,不错!你会使用外部 for 循环来检查 isCancelled 吗?
    • 你能给我一个例子的链接吗?或者你可以发布一个例子吗?
    • @Jonas Byström 这取决于循环内部发生的情况。如果没有这些知识,我会在两个循环中检查isCancelled
    • 不应该是!self.isCancelled吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 2016-07-14
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多