gpt4 book ai didi

ios - 为什么 ViewController 实例的 View 仍在另一个 View 的 subview 列表中时被释放?

转载 作者:行者123 更新时间:2023-11-29 03:27:24 26 4
gpt4 key购买 nike

第 1 点。在委托(delegate)中:

self.friendListVC = [[FriendListVC alloc] init];

第 2 点。在 FriendCollectionVC.mm 中:

- (void)viewDidLoad
{
[super viewDidLoad];

FriendCollectionVC *friendCollectionVC = [[FriendCollectionVC alloc] init];
[self.view addSubview:friendCollectionVC.view];
}

第3点.运行:使用lldb:

po [self collectionView].delegate
p [self collectionView]

结果:[没有可用的 Objective-C 描述](PSTCollectionView *)$6 = 0x212bc400

第4点.继续运行。使用lldb:

po [self collectionView].delegate
p [self collectionView]

结果:

2013-11-30 00:15:25.637 App[45683:70b] *** -[FriendCollectionVC respondsToSelector:]: message sent to deallocated instance 0x67259eb0
[no Objective-C description available]
(PSTCollectionView *) $6 = 0x6785eca0

同时使用lldb:

po ((MyAppDelegate *)[[UIApplication sharedApplication] delegate]).friendListVC.view
<UIView: 0x6656efa0; frame = (0 0; 945 748); autoresize = W+H; layer = <CALayer: 0x665d0fd0>>

第5点。问题:为什么FriendListVC里面的friendCollectionVC会被释放呢?AppDelegate、AppDelegate.friendListVC 和 AppDelegate.friendListVC.view 均可用。friendListVC.view包含 subview friendCollectionVC.view。 - 参见代码 2。并且该项目正在使用ARC。

最佳答案

您没有保留任何指向friendCollectionVC的强指针,因为您将其创建为局部变量。将其 View 添加为 subview 不会改变这一事实。无论如何,仅将一个 Controller 的 View 添加为另一个 Controller View 的 subview 都不是一个好主意。当您将friendCollectionVC 的 View 添加为FriendListVC View 的 subview 时,您应该使用自定义容器 Controller api 将friendCollectionVC 设为FriendListVC 的 subview Controller 。如果这样做,FriendListVC 将有一个指向friendCollectionVC 的强指针(在其childViewControllers 数组中)。

- (void)viewDidLoad {
[super viewDidLoad];
FriendCollectionVC *friendCollectionVC = [[FriendCollectionVC alloc] init];
[self addChildViewController:friendCollectionVC];
[friendCollectionVC didMoveToParentViewController:self];
[self.view addSubview:friendCollectionVC.view];
}

关于ios - 为什么 ViewController 实例的 View 仍在另一个 View 的 subview 列表中时被释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20290017/

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