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

发布于 2024-10-23 22:37:51 字数 351 浏览 0 评论 0原文

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

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

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

Using an NSMutableArray ivar, I plan to write a class that acts like a stack and which objects of various types should be able to be retrieved from.

Whenever that stack threatens to run out of objects because almost all have yet been retrieved, it should automatically push new objects onto itself by fetching them from some sort of as-generic-as-possible "object emitter". For example, there should be supplicant classes which return instances of NSImages or of NSString or any other imaginable types which should be put on the stack but each have to be treated in a separate way beforehand.

What would be the easiest pattern of "plugging in" those object emitting classes into my stack class? The stack class should not need to be aware of the object types it has to deal with, this is where some "helper classes" might set it - but I have no clue where their place would be. I tried Dynamic Creation using NSClassFromString but that just doesn't feel quite right.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

空心空情空意 2024-10-30 22:37:51

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

NSMutableArray is capable of storing any object. Unlike generic collections in Java, where data structures store instances of specific classes, Cocoa allows you to add anything to an NSArray. So, your pop method could simply remove the last object of the array, check to see if the size is smaller than some threshold, and then request new objects from supplier classes.

For example:

- (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;
 }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文