我有一个问题,当我的自定义UIViewController(MyVC)的dealloc方法被弹出时没有被调用。在SO上阅读其他几个答案,似乎有一个罪魁祸首可能是我仍然在某处提到MyVC,这就是为什么dealloc没有被调用。
Obj *objA = [[Obj alloc] initWithValue:value];
MyVC *newVC = [[MyVC alloc] init];
newVC.somIvar = objA;
[self.navigationController pushViewController:newVC animated:YES];
[newVC release];
[objA release];
我仍然感到困惑的是,这是否意味着推送MyVC的根视图控制器(RootVC)仍然具有对它的引用或者MyVC内部的某些内容未被释放,这似乎很奇怪,因为它的dealloc方法不被称为obv它仍然引用了它的所有对象?
据我所知,从推送到弹出MyVC的事件顺序是:
不确定3号?我没有发现任何使用乐器的泄漏,似乎它不能成为MyVC内部的东西,因为它的dealloc方法甚至没有被调用,所以它怎么会清理呢?
答案 0 :(得分:0)
由于您使用点符号将vC分配给另一个对象的iVar,因此该对象将保留它(假设您已在属性声明中声明了retain)。
除非你在object'c类'dealloc方法中释放iVar(以及vC),否则即使对象弹出也不会释放它。所以,将[somIvar release]
添加到对象dealloc方法中,一切都应该很好......
顺便说一句,你可以安全地在将vC分配给iVar之后立即释放vC,因为它会被对象保留,直到它被释放为止。