在 iOS 中发布 UIViewController 的最佳方式是什么
What it is the best way to release UIViewController in iOS
我目前正在构建一个小示例 iOS 应用程序,我以编程方式开发了我的 UIViewControllers 和视图,我的目标是 iOS 7+ 设备,我有一个简单的问题:
在这里我如何展示一个新的控制器
MySuperController *superController = [[MySuperController alloc] init];
[self.navigationController showViewController:superController sender:self.navigationController];
首先我想知道显示另一个视图控制器的方式是否正确?
第二个想象我正在 LoginViewController 中执行那些只会显示一次的指令(通常在用户启动应用程序时)我如何在创建并显示另一个视图控制器后释放此 loginviewcontroller?
我知道这个问题已经被问过,但所有提出的解决方案都是 old/inappropriate(我的示例应用程序启用了 ARC,我认为默认情况下启用)
我是这个环境的新手,非常感谢help/indication谢谢
这是展示 ViewController 的好方法。如果你有 ARC 启用(默认)不用担心释放,它会自动释放。
正如 Roy Nakum 在他的评论中所说,如果您使用的是 ARC,则您的代码没有问题。您使用本地强变量创建视图控制器,然后呈现它。在这一点上,导航控制器获得了它的所有权。由于您的强引用是局部变量,因此在您的方法 returns.
之后它不会保留所有权
但是您的代码还有另一个问题。此行可能会给您带来问题:
MySuperController *superController = [[MySuperController alloc] init];
您不应使用 init
创建视图控制器。它不会有任何内容。您应该使用 initWithNibName:bundle:
(从 NIB 加载视图控制器)或 instantiateViewControllerWithIdentifier
(从故事板加载视图控制器。)
可以设置视图控制器,以便其 "plain" init 方法加载它的视图,但它在 init 方法中需要特殊处理,而且它不是正常的做事方式。
我目前正在构建一个小示例 iOS 应用程序,我以编程方式开发了我的 UIViewControllers 和视图,我的目标是 iOS 7+ 设备,我有一个简单的问题: 在这里我如何展示一个新的控制器
MySuperController *superController = [[MySuperController alloc] init];
[self.navigationController showViewController:superController sender:self.navigationController];
首先我想知道显示另一个视图控制器的方式是否正确? 第二个想象我正在 LoginViewController 中执行那些只会显示一次的指令(通常在用户启动应用程序时)我如何在创建并显示另一个视图控制器后释放此 loginviewcontroller? 我知道这个问题已经被问过,但所有提出的解决方案都是 old/inappropriate(我的示例应用程序启用了 ARC,我认为默认情况下启用)
我是这个环境的新手,非常感谢help/indication谢谢
这是展示 ViewController 的好方法。如果你有 ARC 启用(默认)不用担心释放,它会自动释放。
正如 Roy Nakum 在他的评论中所说,如果您使用的是 ARC,则您的代码没有问题。您使用本地强变量创建视图控制器,然后呈现它。在这一点上,导航控制器获得了它的所有权。由于您的强引用是局部变量,因此在您的方法 returns.
之后它不会保留所有权但是您的代码还有另一个问题。此行可能会给您带来问题:
MySuperController *superController = [[MySuperController alloc] init];
您不应使用 init
创建视图控制器。它不会有任何内容。您应该使用 initWithNibName:bundle:
(从 NIB 加载视图控制器)或 instantiateViewControllerWithIdentifier
(从故事板加载视图控制器。)
可以设置视图控制器,以便其 "plain" init 方法加载它的视图,但它在 init 方法中需要特殊处理,而且它不是正常的做事方式。