1

我在我的 Cocoa 应用程序中进行了一些处理,有时最终会通过数据层次结构调用以执行一系列工作作为事件的结果。每个小块都会创建和破坏一些资源。大多数时候我不想要这些资源,但我想找到一种聪明的方法,在所有工作之前创建它们并在最后杀死它们。

如果无法从“父级”或其他地方全局使用这些缓冲区等,是否有办法在事件循环运行结束时在某些代码中本地知道?然后,如果它们不存在,我可以创建它们,并保留它们直到运行循环结束,然后将它们重用于该时间之前的任何后续调用。

编辑:我不是在寻找关于如何重组我的代码的建议,无论如何我都可以这样做。这个问题只是为我提出了如何知道运行循环何时完成的问题。如果我在写,我不知道,Javascript,我会用setTimeout零来完成最终事件清理。我想间隔为零的 NSTimer 也可以做到这一点,但想知道是否有更清洁的东西。

谢谢。

4

2 回答 2

2

既然你说“Cocoa”和“NSRunLoop”,我就假设你在Mac OS X上。只要你在Snow Leopard上,你就可以使用Grand Central Dispatch非常优雅地解决这种问题。

如果在 Leopard 或更高版本(或 iPhone,就此而言),您可以使用 NSOperations 来做同样的事情(代码稍微多一点)。

所有这些都在并发编程指南中讨论。

即使您的算法并非设计为在主线程之外执行 - 在主事件循环之外 - 您仍然可以解决“稍后”调度内容的问题,通过主队列串行执行。

于 2010-06-12T23:37:17.063 回答
0

我对在 Cocoa 中编程比较陌生,但是这不是很容易通过一个带有该变量的 getter 的类级变量来完成吗?

假设您的代码是这样的,在伪代码中:

bool completed = false;

void chi
  if completed = false
    create foo;
    create bar;

   completed = true 
  end if

  while looping
     ...
  loop

  completed = false;
  destroy foo
  destroy bar

在程序的其他部分中,检查“完成”的值以查看是否创建了所述对象?

编辑:我只是重新阅读了您的问题并进行了相应的编辑。如果这是一个多线程应用程序,您还需要确保您的对象是线程安全的。

于 2010-06-12T22:37:00.337 回答