2011-03-16 39 views
0

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

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

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

回答

1

NSMutableArray能够存储任何对象。与Java中的泛型集合不同,数据结构存储特定类的实例,Cocoa允许您将任何内容添加到NSArray中。所以,你的弹出方法可以简单地删除数组的最后一个对象,检查大小是否小于某个阈值,然后从供应商类中请求新对象。

例如:

- (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

Java集合是由能够存储任何对象的默认值。只有通用版本才能执行任何类型的强制执行。 – 2011-03-16 21:45:26

+0

@Jonathan - 好点!编辑我的回应以反映这一点。 – 2011-03-16 21:47:31

+0

不错的代码示例。你还应该添加一个推送方法。 :) – 2011-03-17 01:32:08