我有一个视图控制器的子类。将此视图控制器的视图添加到另一个视图后,与MyViewController
视图的任何交互都会导致崩溃。当运行僵尸时它显示双重释放,保留计数myViewController
已经变为-1。
我在此对象上调用alloc
,这应该将保留计数设置为1,我还将myViewcontroller
的视图添加到另一个视图,这应该将保留计数设置为2。那我怎么得到双重发布? 这只会在ARC上崩溃
- (void)viewDidLoad {
[super viewDidLoad];
MyViewcontroller *myViewcontroller = [[MyViewController alloc] init];
[self.view addSubview:myViewcontroller.view];
}
答案 0 :(得分:5)
这里没有“双重”释放,只有一个。
您将视图控制器存储在本地变量中。 ARC在此方法结束时正确释放它 - 否则会导致泄漏,因为您将不再引用它。*
我还将
myViewcontroller
的视图添加到另一个视图中,该视图应该将保留计数设置为2。
没有; addSubview:
取得视图的所有权,而非控制器。视图本身后来仍然存在,但控制器不会。
*所以,有趣的是,这不会在MRR下崩溃,但是不正确。