如何使用各种类型的对象填充堆栈

时间:2011-03-16 20:48:00

标签: objective-c cocoa cocoa-design-patterns

使用NSMutableArray ivar,我打算编写一个类似于堆栈的类,并且应该能够从中检索各种类型的对象。

每当该堆栈威胁到对象耗尽,因为几乎所有对象都已被检索,它应该通过从某种尽可能通用的“对象发射器”中获取它们来自动将新对象推送到自身。例如,应该有请求者类返回NSImages或NSString的实例或任何其他可以想象的类型,这些类型应该放在堆栈上但是每个都必须事先以单独的方式处理。

将这些对象发射类“插入”我的堆栈类中最简单的模式是什么?堆栈类不应该知道它必须处理的对象类型,这是一些“辅助类”可能设置它的地方 - 但我不知道它们的位置在哪里。我尝试使用NSClassFromString进行动态创建,但这感觉不太合适。

1 个答案:

答案 0 :(得分: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;
 }