Ios 过早解除分配的视图控制器

Ios 过早解除分配的视图控制器,ios,uiviewcontroller,automatic-ref-counting,nszombie,Ios,Uiviewcontroller,Automatic Ref Counting,Nszombie,当ui按钮触发选择器时,我正在绘制网格视图并遇到EXC\u BAD\u ACCESS错误。打开僵尸对象会给我以下信息: *** -[FooViewController performSelector:withObject:withObject:]: message sent to deallocated instance 0x91818f0 以下是我正在做的: BazViewController *baz = [[BazViewController alloc] initDesignatedI

ui按钮
触发选择器时,我正在绘制网格视图并遇到
EXC\u BAD\u ACCESS
错误。打开僵尸对象会给我以下信息:

*** -[FooViewController performSelector:withObject:withObject:]: message sent to deallocated instance 0x91818f0
以下是我正在做的:

BazViewController *baz = [[BazViewController alloc] initDesignatedInitializer];
FooViewController *foo = [[FooViewController alloc] initDesignatedInitializer];
[baz.view addSubview:foo.view];
我在ARC上运行这个,所以我可以看到FooViewController被过早释放的可能性

所以我做了这个黑客:

在名为
viewControllers
的BazViewController中创建一个
NSMutableArray
ivar&property,并执行以下操作:

BazViewController *baz = [[BazViewController alloc] initDesignatedInitializer];
FooViewController *foo = [[FooViewController alloc] initDesignatedInitializer];
[baz.view addSubview:foo.view];
[baz.viewControllers addObject:foo];
但我还是得到了上面同样的错误


我继续在处理网格的视图控制器上执行上述操作。(创建视图控制器阵列,并在创建该对象时将该对象添加到该阵列中)。还是没有骰子。有人能推荐另一种方法来防止此vc过早释放吗?

在创建它的类中创建一个
FooViewController
属性,并给该属性一个
strong
属性。分配给它,而不是一个局部变量。

我自己解决了这个问题

我没有创建数组,而是使用
addChildViewController
添加对相应vc的强引用。没有过早解除分配,也没有僵尸对象

BazViewController *baz = [[BazViewController alloc] initDesignatedInitializer];
FooViewController *foo = [[FooViewController alloc] initDesignatedInitializer];
[baz.view addSubview:foo.view];
[baz addChildViewController:foo];

如果父视图控制器内部有1、2或3个
FooViewControllers
,该怎么办?为所有3个创建属性并根据需要使用它们?您的示例代码无效:它使用FooViewController和BazViewController作为类型名和变量名。这使得很难判断发生了什么:BazViewController是否被分配给局部变量?保留它的原因是什么?代码样式已更正,我正在编写伪代码,但在尝试的解决方案中,我在父视图控制器中创建了一个强可变数组属性,并在中添加了所有子视图控制器,希望这个强保留的引用不会导致ARC过早地释放内存。伪代码对于找出丢失的retain在哪里很少有帮助。什么是保留父VC?VC层次结构是UINavigationController>GridViewController>BazViewController>FooViewController;GridViewController是一个UIStoryboard场景,它有一个包含所有BazViewController的强数组属性,每个BazViewController都有一个类似于FooViewController的强数组属性