Как заполнить стек объектами разных типов - PullRequest
0 голосов
/ 16 марта 2011

Используя NSMutableArray ivar, я планирую написать класс, который действует как стек и какие объекты различных типов должны быть доступны для извлечения.

Всякий раз, когда в этом стеке возникает угасание объектов, потому что почтивсе они были извлечены, он должен автоматически помещать новые объекты в себя, извлекая их из некоего "универсального, насколько это возможно" "излучателя объекта".Например, должны быть классы соискателей, которые возвращают экземпляры NSImages или NSString или любых других мыслимых типов, которые должны быть помещены в стек, но каждый из них должен быть обработан заранее отдельным способом.

Что будетСамый простой шаблон "подключения" этих объектов, испускающих классы в мой класс стека?Класс стека не должен знать о типах объектов, с которыми он имеет дело, вот где некоторые «вспомогательные классы» могут его установить - но я понятия не имею, где их место будет.Я пробовал динамическое создание с использованием NSClassFromString, но это не совсем правильно.

1 Ответ

1 голос
/ 17 марта 2011

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;
 }
...