gpt4 book ai didi

iphone - 对内存管理的一些理解

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

我创建了 viewController 的一个属性,并从 viewController 的 ClassB(A 类)中保留它。

所以基本上我有@property(非原子,保留)ClassAViewControllerVC,并在主文件中合成。

我有一个 IBAction,在其中分配 ClassAViewController 并将其推送到导航堆栈上,但我试图分析应该在哪里释放此 viewController?

- (IBAction) response {

ClassAViewControllerVC = [ClassAViewController alloc] initWithNib:@"ClassAViewController" bundle:[NSBundle mainBundle]];

[self.navigationController pushViewController:self.ClassAViewControllerVC animated:YES]

}

如上所述,在将 View Controller 堆叠到导航 Controller 上后,可以释放 View Controller 吗?

此外,首先为此类 viewController 设置属性是个好主意吗?我开始注意到,如果不使用 @property 保留方式,我的应用程序就会开始崩溃。如有任何想法或担忧,我们将不胜感激。

谢谢

最佳答案

首先,不,没有必要将这样的对象保留在属性中。仅当类稍后需要访问对象时,才需要将对象保留在属性中。在这种情况下,我认为局部变量就可以了。

在此示例中,您使用 alloc 创建一个 ClassAViewController,这意味着调用者(此方法)有责任在完成后释放它。

当您将其添加到导航 Controller 堆栈时,导航 Controller 会保留它,因为它保留对它的引用。

因此,在此方法结束时,您应该释放它,但它已被导航 Controller 保留,因此不会被删除。

代码应如下所示:

- (IBAction) response {
ClassAViewController *viewController = [ClassAViewController alloc] initWithNib:@"ClassAViewController"
bundle:[NSBundle mainBundle]];

[self.navigationController pushViewController:viewController animated:YES]

[viewController release];
}

附注Objective-C 中的惯例是以小写字母开头的变量名。类名使用大写开头字母,这让我感到困惑! ;)

关于iphone - 对内存管理的一些理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8658218/

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