2011-03-16 2 views
0

NSMutableArray ivar을 사용하여 스택처럼 작동하는 클래스와 다양한 유형의 객체를 검색 할 수 있어야합니다.다양한 유형의 객체를 스택에 채우는 방법

거의 모든 것이 아직 검색되지 않았기 때문에 스택이 없어 질 때마다 자동으로 새 개체를 가능한 한 일반적인 "개체 이미 터"와 같은 종류의 개체에서 가져 와야합니다. 예를 들어, NSImages 나 NSString 또는 스택 상에 놓여 야하지만 각각 별도의 방식으로 처리 되어야만하는 상상할 수있는 다른 유형의 인스턴스를 리턴하는 요청자 클래스가 있어야합니다.

개체 방출 클래스를 내 스택 클래스에 "연결하는"가장 쉬운 패턴은 무엇이겠습니까? 스택 클래스는 처리해야하는 객체 유형을 알아야 할 필요가 없습니다. 일부 "도우미 클래스"가이를 설정할 수 있습니다. 그러나 그 위치가 어디인지 알 수는 없습니다. NSClassFromString을 사용하여 Dynamic Creation을 시도했지만 꽤 괜찮은 느낌이 들지 않습니다.

답변

1

NSMutableArray는 모든 개체를 저장할 수 있습니다. 데이터 구조가 특정 클래스의 인스턴스를 저장하는 Java의 제네릭 컬렉션과 달리 Cocoa에서는 NSArray에 아무 것도 추가 할 수 없습니다. 따라서 pop 메서드는 배열의 마지막 객체를 제거하고 크기가 임계 값보다 작은 지 확인한 다음 공급자 클래스에서 새 객체를 요청할 수 있습니다. 예를 들어

:

- (NSObject *)pop { 
     NSObject *poppedObject = [mutableArray lastObject]; 
     [mutableArray removeLastObject]; 
     if ([mutableArray count] < SMALLEST_ALLOWABLE_STACK_SIZE) { 
      for (MYContentProvider *provider in [self contentProviders]) { 
       [mutableArray addObjectsFromArray:[provider fetchContent]]; 
      } 
     } 
     return poppedObject; 
} 
+0

자바 콜렉션은 객체를 저장할 수있는 기본으로한다. 유형 적용을 수행하는 것은 일반 버전에만 해당됩니다. –

+0

@Jonathan - 좋은 지적입니다! 그것을 반영하기 위해 내 응답을 편집했습니다. –

+0

좋은 코드 샘플. 또한 푸시 메서드를 추가해야합니다. :) –

관련 문제