gpt4 book ai didi

ios - 为什么 UIViewController 会留在内存中

转载 作者:行者123 更新时间:2023-12-01 16:49:00 26 4
gpt4 key购买 nike

假设一个 View Controller 是这样创建的:

@property (nonatomic, strong) SomeViewController *someViewController;

...

self.someViewController = [[SomeViewController alloc] initWithView:imgView];
[self addChildViewController:self.someViewController];

self.someViewController.view.frame = self.view.bounds;
[self.mainView addSubview:self.someViewController.view];

为什么它不会被以下发布?
__weak MainViewController *weakSelf = self;
self.someViewController.didCloseBlock = ^{

[weakSelf.someViewController.view removeFromSuperview];
[weakSelf.someViewController willMoveToParentViewController:nil];
[weakSelf.someViewController removeFromParentViewController];

weakSelf.someViewController = nil;

};

我可以说它没有被释放,因为如果我继续打开和关闭 View Controller (每次打开一个新实例时都会创建一个新实例),它会导致内存不足警告(然后在 iOS5 上崩溃),并且在 SomeViewController didReceiveMemoryWarning 中,我看到了我创建新 SomeViewController 次数的日志。例如,当我在打开 9 个新的 SomeViewController 后收到内存警告时,我会收到 9 个 didReceiveMemoryWarning 日志,这表明我在内存中有 9 个 SomeViewController 实例,尽管我在上面的代码中将每个实例都清空了。

最佳答案

您使用强注释在您的属性中保留您的 View 一次,然后使用 self.someViewController = [[SomeViewController alloc] initWithView:imgView]; 再次保留您的 View 。

使用综合变量应该摆脱这个:_someViewController = [[SomeViewController alloc] initWithView:imgView];
如果您不使用 ARC,可以使用 self.someViewController = [[[SomeViewController alloc] initWithView:imgView] autorelease];
我可能会选择第一个选项,不管是否是 ARC。

关于ios - 为什么 UIViewController 会留在内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17765460/

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