2012-03-31 4 views
0

안녕 Objective C의 대기열에서 함수와 메서드를 시작하는 방법은 무엇입니까? 다음과 같은 의미입니다.단계별 실행 방법

방법 1 다음 방법 2, 방법 3, NSThread을 사용해야합니까?

+0

당신이 방법 항목 등, 방법 2를 호출하기 전에 끝날 때까지 기다릴 필요합니까이? – user523234

+0

@ user523234 : 예를 들면 다음과 같습니다. –

답변

0

GCD 직렬 대기열과 NSSelectorFromString 방법을 사용하는 것과 관련된 다른 해결책이 있습니다.

1 : 당신의 방법과 배열을 만들기 이름

2하십시오 GCD 직렬 큐를 작성

3 : NSSelectorFromString이 방법에 메소드 이름 문자열을 변환하고 A의를 사용하여 시리얼 Q에 삽입하여 루프 등이 여기에

전체 테스트 코드입니다 :

- (IBAction)buttonSerialQPressed:(id)sender 
{ 
    dispatch_queue_t serialdQueue; 
    serialdQueue = dispatch_queue_create("com.mydomain.testbed.serialQ", NULL); 

    NSArray *arrayMethods = [NSArray arrayWithObjects:@"method1", @"method2", @"method3", nil]; 
    for (NSString *methodName in arrayMethods) 
    { 
     dispatch_async(serialdQueue, ^{ 
      SEL myMethod = NSSelectorFromString(methodName); 
      [self performSelector:myMethod]; 
     }); 
    } 
} 

-(void)method1 
{ 
    for (int i=0; i<1000; i++) 
    { 
     NSLog(@"method1 i: %i", i); 
    } 
} 

-(void)method2 
{ 
    for (int i=0; i<10; i++) 
    { 
     NSLog(@"method2 i: %i", i); 
    } 
} 

-(void)method3 
{ 
    for (int i=0; i<100; i++) 
    { 
     NSLog(@"method3 i: %i", i); 
    } 
} 
3

한 가지 방법은 함수 포인터가 Queue 또는 Stack 인 다음 메서드를 남기지 않을 때까지 최상위 메서드를 실행하고 팝하는 것입니다. 물론 배열과 currentIndex 변수를 사용하여이 작업을 수행 할 수 있습니다 (currentIndex0에서 arraySize - 1까지 늘림, 매번 myArray[currentIndex]에 함수 포인터를 실행 함). 함수 포인터 자체에 대한 자세한 내용은 Function Pointers in Objective C을 참조하십시오.

0

NSOperationQueue를 사용합니다. 한 번에 하나의 작업 만 실행하도록 설정할 수 있습니다.이 경우 원하는 메서드 호출을 통해 단계별로 진행됩니다. NSInvocationOperation을 사용하여 메서드 호출에서 작업을 만들 수 있습니다.

관련 문제