1

我有一个视图控制器的子类。将此视图控制器的视图添加到另一个视图后,与视图的任何交互MyViewController都会导致崩溃。运行僵尸时,它显示双重释放,保留计数myViewController已变为 -1。

我正在调用alloc这个对象,它应该使保留计数为 1,并且我还将视图添加myViewcontroller到另一个视图,这应该使保留计数为 2。那么我如何获得双重释放?这只会在 ARC 上崩溃

- (void)viewDidLoad {
   [super viewDidLoad];

   MyViewcontroller *myViewcontroller = [[MyViewController alloc] init];
   [self.view addSubview:myViewcontroller.view];
}
4

1 回答 1

5

这里没有“双重”版本,只有一个。

您将视图控制器存储在此处的局部变量中。ARC 在此方法结束时正确释放它——否则会导致泄漏,因为您将不再引用它。*

我还将视图添加myViewcontroller到另一个视图中,这将使保留计数变为 2。

不; addSubview:拥有视图的所有权,而不是控制器。视图本身稍后仍将处于活动状态,但控制器不会。


*所以,有趣的是,这不会在 MRR 下崩溃,但会是不正确的。

于 2012-06-28T19:49:26.030 回答