【问题标题】:Need to call NSAutoReleasePool after performSelector:withObject:afterDelay?需要在 performSelector:withObject:afterDelay 之后调用 NSAutoReleasePool 吗?
【发布时间】:2012-08-10 06:30:10
【问题描述】:

作为标题。调用 performSelector:withObject:afterDelay 后需要调用 NSAutoReleasePool 吗?

我认为 performSelector:withObject:afterDelay: 不在主线程上,所以需要添加自动释放池。对吗?

例如:

[self  performSelector:@selector(update) withObject:nil afterDelay:0.1];

-(void) update {
NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init]; // Is it necessary
...
[pool drain];
}

谢谢!

【问题讨论】:

    标签: iphone ios


    【解决方案1】:

    没有。此方法使用为该实际运行循环调度的 NSTimer,在您调用它的同一线程/运行循环上执行提供的选择器。您无需担心。

    【讨论】:

      【解决方案2】:

      您需要创建自己的@autoreleasepool 的唯一情况是您同时创建和自动释放大量对象。

      在您的情况下,您的 update 方法将在您创建它时在同一个线程/运行循环上调用,并且会很高兴地落在主 @autoreleasepool 下。

      NSObject 文档对您调用的特定方法有一些冗长的细节。

      【讨论】:

      • “您需要创建自己的自动释放池的唯一实例是同时创建和自动释放大量对象。” - 这是错误的。您还需要为您分离的任何线程使用单独的自动释放池。
      • @H2CO3 确实如此。然而,OP 的工作并没有分离 NSThreads。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      相关资源
      最近更新 更多