我想知道 iPhone 上的 autorelese 是如何工作的。我认为,一旦您将自动释放发送到一个对象,它保证会保留到 autorelease
发送的 block 范围的末尾。对吗?
我在 applicationDidFinishLaunching
中从 NIB 初始化一个 View ,如下所示:
(void)applicationDidFinishLaunching:(UIApplication *)application {
loginViewController = [[[LoginViewController alloc] initWithNibName:@"LoginView" bundle:nil] autorelease];
[window addSubview: [loginViewController view]];
[window makeKeyAndVisible];
}
View 根本没有显示,屏幕上只有 UIWindow
现在,一旦我从 Controller 初始化的末尾删除了 autorelease
,一切就从那里开始顺利进行。
这是关于什么的?
干杯, K.
最佳答案
当您调用autorelease
时,您将对象的所有权交给当前的自动释放池。运行循环在派发事件(例如 applicationDidFinishLaunching:
)之前创建一个新的自动释放池,并在事件结束时销毁该池。
当您将 LoginViewController
的所有权交给自动释放池时,它会在 applicationDidFinishLaunching:
返回后立即释放。当 View Controller 释放自身时,它会从父 View (在本例中是您的窗口)中删除它的 View 。
您的应用程序委托(delegate)应保留 LoginViewController
的所有权并在应用程序委托(delegate)的 dealloc
方法中释放
它(或者当您完成您的登录并已转到另一个 View )。
关于ios - 自动释放范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/581828/