0

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

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

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

4

1 回答 1

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;
 }
于 2011-03-16T21:43:30.423 回答