2012-02-08 3 views
1

이 코드가 : 나는 "openImages"메소드를 호출 화면을 터치IOS가 : 그 실행의 방법을 중지

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

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

point =[touch locationInView:imageView]; 

[self openImages]; 
} 

evrytime을;

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

그럼 내가 몇 가지있는 UIImage를 열 더블 루프가 있기 때문에 당신은 "openImage는"무거운 방법이라고 볼 수있다 (그러나 그것은 문제가되지 않습니다). 제 질문은, 제가 스크린을 터치 할 때마다 openImage를 멈추고, 한 번 더 전화를 걸 수 있다는 것입니다. (왜냐하면 종종 스크린 앱 크래시를 만지기 때문입니다). 도와 주시겠습니까?

답변

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]]; 
} 
+0

좋은 소식! isCancelled를 확인하기 위해 outer for 루프를 사용 하시겠습니까? –

+0

예를 들어 나에게 링크를 줄 수 있습니까? 또는 예제를 게시 할 수 있습니까? – CrazyDev

+0

@Jonas Byström 물론 루프 내부에서 어떤 일이 발생하는지에 따라 다릅니다. 그 지식이 없으면 두 루프 모두에서 'isCancelled'를 확인합니다. – hoha