NSRunLoop 和 NSAutoreleasePool,它们是如何交互的?

Posted

技术标签:

【中文标题】NSRunLoop 和 NSAutoreleasePool,它们是如何交互的?【英文标题】:NSRunLoop and NSAutoreleasePool, how do they interact? 【发布时间】:2011-12-28 06:33:28 【问题描述】:

自动释放池将在运行循环结束时释放。

这是否意味着任何循环迭代的结束? 什么时候发生?

处理完每个触摸、动作或远程控制事件后, 池将被排干。

如果我们的应用程序不提供任何触摸怎么办?

如果我们使用这样的代码,我们如何确定对象没有被释放 [self someObject]retainsomeMethod?

- (id) someObject

    return [[[SomeClass alloc] init] autorelease];


- (void) someMethod

    SomeClass * object = [[self someObject] retain];
 

【问题讨论】:

Obj-c autorelease a variable up a chain of methods 的可能重复项 【参考方案1】:

从调用堆栈的角度来考虑。

在您上面给出的示例中,-someMethod 在从 -someObject 返回的值被保留并分配给 object 之前不会退出。

【讨论】:

以上是关于NSRunLoop 和 NSAutoreleasePool,它们是如何交互的?的主要内容,如果未能解决你的问题,请参考以下文章

[iOS]浅谈NSRunloop工作原理和相关应用

关于 NSTimer 和 NSRunLoop 的一些理解

NSRunLoop和NSTimer的小Demo

NSRunLoop的进一步理解

NSRunLoop 正在消耗大量的 cpu 和内存

NSRunLoop 和 GCD 队列