gpt4 book ai didi

iPhone:自动发布 - 何时发布(澄清)?

转载 作者:行者123 更新时间:2023-12-03 20:23:16 25 4
gpt4 key购买 nike

我已经阅读了一些有关 autorelease 的作用和常见用例的文档。我理解大多数人是这样描述的:“自动释放池通常在运行循环的每次迭代后释放。”

运行循环的迭代到底是由什么构成的?抱歉,这个解释让我很困惑,因为它听起来很抽象......

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

最佳答案

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

当代码未显式调用的方法完成时,运行循环就会结束。那是自动释放对象被释放的时候。 (这有点过于简单化了。)

如果您仔细考虑您的代码,就会发现有许多入口点您没有调用。其中包括对用户按下 UIViewController 子类上的 UIControl、loadView 或 viewDidLoad 的 react 、NSTimer 调用的方法或使用 performSelector:withObject:afterDelay: 调用的内容。天空中基本上有一个大循环可以执行类似的操作(这里非常粗略的伪代码):

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];
}

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

关于iPhone:自动发布 - 何时发布(澄清)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6566475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com