gpt4 book ai didi

ios - dismissViewControllerAnimated 不释放内存

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:47:08 28 4
gpt4 key购买 nike

我有一个 UIViewController A,此时我的内存为 104 Mb。在 A 中,我通常像这样打开 UIVIewController B:

UIViewController *b = [[UIViewController alloc] initWithLevel:level actualUser:actualUser parentViewController:self];
[self presentViewController:b animated:NO completion:nil];

此时我的内存为 132 Mb,然后当用户触摸按钮时,我会像这样打开 UIViewController C:

UIViewController *c = [[UIViewController alloc] initWithBlackboard:3];
[self dismissViewControllerAnimated:NO completion:^{
[parentViewController(i get this property in the init method) presentViewController:c animated:NO completion:nil];
}];

在这里,我所做的是关闭 B,然后打开 C,所以当我关闭 C 时,它会直接引导我到 A。

此时我的内存是 153 Mb,这是错误的,因为 B 的内存永远不会解除分配(释放)。在此之后,我这样解散以返回到 A:

[self.presentingViewController dismissViewControllerAnimated:NO completion:^{}];

我有 132 Mb 而不是 104 Mb,所以 B 从未被释放。 window 以正确的方式打开和关闭,但内存是问题所在。

我已经分别测试了每个 UIViewController,没有任何内存问题。当它们绑定(bind)在一起时,问题就来了。有什么想法吗?

我也留意过内存泄漏,但我没有找到。

最佳答案

这是一个循环引用。

@interface A : UIViewController {

UIViewController* B;

}

@end

@interface B : UIViewController {

UIViewController* A;

}

@end

如果你使用带有强引用或默认的 ARC,它会导致内存泄漏..

内存工具Instruments并不总是正确的。在一些复杂的程序中,记录保留计数是检查释放是否正确的一种方式。如果使用ARC来管理内存,最好避免循环引用。

这个链接是office ARC文档,写的很详细。 enter link description here

一点建议,祝好!

关于ios - dismissViewControllerAnimated 不释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20462044/

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