2010-07-03 3 views
0

나는이 방법을 사용하고 있으며이 종류의 것은 매우 커서이 포스트에 포함시킬 수 없다. 매개 변수로 배열을 가져 와서 객체 (NSStrings)를 테스트합니다. 가끔은 - 항상 그런 것은 아니지만, 메소드는 그 문자열들 중 하나를 포함하는 배열로 자신을 호출합니다. 모든 테스트가 통과되면, NSString은 프로세스를 처리하는 다른 메소드로 전송됩니다. 이 모든 것은 잘 작동하지만 지금은 다른 접근 방식으로 작업하고 있습니다. 메서드를 호출하고 테스트를 성공적으로 통과 한 모든 NSString 배열을 반환하도록합니다. 그러나 그 방법이 스스로를 부르기 때문에 나는 이것을 어떻게하는지 정말로 모른다. 이를 처리하는 대신 성공적으로 테스트 한 모든 NSString을 배열에 추가 할 수 있지만 모든 배열에서 배열에 액세스 할 수 있어야합니다. 여기서 추천하는 것은 무엇입니까? 나는 .. 공용 변수를 피하기 위해 싶습니다재귀 적 방법의 프로그래밍 구조에 관한 질문

- (void)doStuff: (NSArray *)array { //A quick (very short) example of what I have now. 
    for (NSString *string in array) { 
     if ([string isEqualToString: @"test"]) 
      [self doStuff: [NSArray arrayWithObject: @"test2"]]; 
     else 
      [self processStuff: string]; 
    } 
} 

답변

2

당신은 매개 변수 중 하나로 변경 가능한 배열을 추가하고이 결과를 추가 할 수 있습니다

- (void)doRecursiveWithData:(NSArray *)array storeResultsIn:(NSMutableArray *)results { 
    if (shoudGoDeeper) 
     [self doRecursiveWithData:(your new array)]; 
    else 
     [results addObject:(whatever you want to store)]; // or use another method to so so 
} 

을 나는 당신의 예를 들어 그냥 알고, 예를 하지만 재귀없이 진행할 수있는 방법에 대해 생각해 볼 가치가 있습니다. 여러면에서 쉽게 할 수 있고 종종 더 잘 수행됩니다.

+0

두 번째 매개 변수가 쉽게 보입니다. 나는 그것을 시험 할 것이다. 재귀없이 작업을 수행하는 것이 제 목적을 위해 쉽게 수행 할 수 있다고 생각하지 않습니다. –

+0

+1 -이 작업을 수행하는 표준 방법입니다. 그러나'results' 배열을 재귀 호출에 전달하는 것을 잊지 마십시오! (또한 "real"입력만을 취하는 간단한 입력 메소드가있는 일반적인 변형에 주목할 필요가 있습니다.이 경우 "result"는 여분의 상태 변수를 설정하고 주 재귀 함수를 호출합니다. 마지막으로 결과를 언 패킹하거나 반환하는 params로 상태 변수를 포함합니다.) – walkytalky