首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPhone: autorelease -它到底什么时候发布(澄清)?

iPhone: autorelease -它到底什么时候发布(澄清)?
EN

Stack Overflow用户
提问于 2011-07-04 08:52:49
回答 2查看 456关注 0票数 2

我已经阅读了一些关于自动发布的功能和常见用例的文档。我理解大多数人是这样描述它的:“自动释放池通常在run循环的每次迭代后释放。”

run循环的迭代究竟由什么组成?抱歉,这个解释把我搞糊涂了,因为它听起来很抽象...

当它从一个函数返回时是一个迭代吗?这是否意味着任何具有自动释放功能的对象都是局部变量?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-04 09:13:28

最简单的思考方式是这样的:

当您的代码没有显式调用的方法结束时,run循环结束。这就是释放自动释放对象的时候。(这有点过于简单了。)

如果仔细考虑代码,就会发现有许多入口点是不需要调用的。这些包括对用户在UIViewController子类上按下UIControl、loadView或viewDidLoad的反应,由NSTimer调用的方法,或使用performSelector:withObject:afterDelay:调用的东西。基本上,天空中有一个很大的循环,它做这样的事情(这里有非常粗糙的伪代码):

代码语言:javascript
复制
while (YES) {
  if ([pendingDelayedSelectorCalls count] > 0) {
    [self performNextDelayedSelectorCall];  // Entry point for your code.
    [self drainAutoreleasePool];
  }
  if ([pendingTouchReactions count] > 0) {
    [self performNextTouchReaction];  // Entry point for your code.
    [self drainAutoreleasePool];
  }
  if ([pendingTimerFires count] > 0) {
    [self performNextTimerFire];  // Entry point for your code.
    [self drainAutoreleasePool];
  }
  [self collectNewPendingCallsTouchesAndTimers];
}

我确信实际编写的代码比这更好,但这可以让您大致了解run循环是什么。另外,请查看this post

票数 5
EN

Stack Overflow用户

发布于 2011-07-04 09:01:51

请参阅:Autorelease pools in appkit applications

清晰地解释了AppKit (或UIKit)如何创建NSRunLoop。runloop处理所有的事情,比如收集输入、刷新显示等等。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6566475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档