ios - 自动释放范围

标签 ios objective-c xcode cocoa cocoa-touch

我想知道 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/

相关文章:

ios - 如何在 iOS swift 中滑动 Collection View 时调用 map 注释?

ios - 如何在已加载 View 时使用出现的键盘打开 View ?

ios - 更改 SCNMorphers 权重使多边形变平(iOS 11 测试版)

iphone - didUpdateToLocation 未调用

iOS modal view transition flip 无需整屏翻转

ios - 删除按钮位于 UITableView 样式分组单元格背景之外

iphone - 本地存储还是 SQLite?

objective-c - 帮助进行简单的 5 星级评级控制

swift - IBDesignable 类绘图 UIImage 未在 Storyboard 中显示

ios - 在另一个函数中快速包装函数