代码之家  ›  专栏  ›  技术社区  ›  catlan

NSO主操作中的NSAutoreleasePool?

  •  25
  • catlan  · 技术社区  · 18 年前

    文件 +[NSThread detachNewThreadSelector:toTarget:withObject:]

    对于非垃圾收集的应用程序,方法 aSelector 负责 用于为新分离的线程设置自动释放池并释放 在游泳池退出之前。

    我的问题是,我需要创建自己的吗 NSAutoreleasePool 在我的凌驾于 -[NSOperation main] 方法,或是 NSOperation ?

    5 回复  |  直到 17 年前
        1
  •  14
  •   Marc Charbonneau    16 年前

    好问题,就连苹果自己的文档和示例代码都不太清楚这一点。我相信我已经找到了答案:

    因为行动是客观的 对象,则应始终创建 早期的自动释放池 任务代码的实现。一 针对Objective-C的泄漏 期间自动释放的对象 你的任务执行。虽然有 执行自定义代码的时间, 你永远不应该相信那种行为 并应始终提供您自己的。

        2
  •  12
  •   user23743 user23743    18 年前

    是的,你知道。您正在定义NSOperationQueue将在“某个”线程上执行的自包含工作,因此您负责管理该工作中的内存。

        3
  •  6
  •   DavidPhillipOster    17 年前

    您不需要在main中创建自己的NSAutoreleasePool,系统会为您创建。要查看此信息,请使用Xcode菜单命令Run>显示>断点打开“断点”窗口并键入:

    现在运行您的程序,您将看到在NSO操作中创建了一个自动释放池。

    另见苹果的例子,例如, http://developer.apple.com/Cocoa/managingconcurrency.html 它们不会创建自己的自动释放池。

        4
  •  2
  •   Barry Wark    17 年前

    是的,您需要创建一个 NSAutoreleasePool [NSOperation main] NSOperation 子类和您的 [NSOperation start] 方法创建 自动释放池 在调用“[NSOperation main]之前。

    这个 http://developer.apple.com/documentation/Cocoa/Reference/NSOperation_class/Reference/Reference.html

        5
  •  0
  •   user156027 user156027    16 年前

    是的,你需要。

    - (void) main
    {
      NSAutoreleasePool *thePool = [[NSAutoreleasePool alloc] init];
      //your code here
      //more code
      [thePool release];
    }