即时通讯存在问题,当我的自定义UIViewController(MyVC)的dealloc方法在弹出时未被调用。阅读其他一些关于SO的答案,似乎一个罪魁祸首可能是我仍然在某处引用MyVC,这就是为什么dealloc没有被调用。未在UIViewController中调用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事件的顺序是:
- 创建和当按下导航栏,popViewControllerAnimated后退按钮如上
- 描述从RootVC推MyVC :在navigationController中调用并且MyVC被弹出
- 如果没有对MyVC的进一步引用,那么navigationController会调用它的dealloc方法?
不确定3号?我还没有发现任何使用仪器的泄漏,似乎它不能在MyVC中使用,因为它的dealloc方法甚至没有被调用,所以它会如何清理它呢?
Thx的回应,虽然我很困惑,因为“因为你使用点符号将你的VC分配给另一个对象的iVar”。我以为我是在我的newVC中分配ojbA给ivar而不是其他方式?我在newVC的dealloc方法中也有[someIvar release],但是如前所述,dealloc方法永远不会调用newVC,因此[someIvar release]也永远不会被调用? – James 2011-02-28 20:35:59
@James:你说得对,Toastor似乎已经变得困惑。这是objA被保留在那里(至少如果该财产是宣布保留,而不是分配或复制)。我发现您发布的代码中没有任何内容会导致newVC有额外的保留。 – Anomie 2011-02-28 20:50:29
你说得对。我混淆了事情,对不起!好吧,事情并不那么明显我害怕......我会再次考虑并删除我的答案,如果我不提出另一个想法...再次,我很抱歉! – Toastor 2011-02-28 21:00:41