我在超级视图中有这个:

mySubView = [[MySubView alloc] init];
[self addSubview:mySubView];
[mySubView release];


然后在某个时候,在子视图中,这是:

[self removeFromSuperview];


当我调试它时,我注意到从未调用子视图的dealloc,尽管我相当确定引用计数应该为0。为什么会有这个想法?谢谢。

最佳答案

是的,当您发送removeFromSuperview时,随后释放了已发送的消息。并且每个释放的调用减少保留计数。并且以防万一:

MySubView * mySubView = [[MySubView alloc] init];
[window addSubview:mySubView];
[mySubView release];
[mySubView removeFromSuperview];


结果将与您预期的一样:removeFromSuperview之后,mySubView的保留计数变为0,然后将调用dealloc。

但是在您的示例中,“随后某个时候再有”后面有更多代码,而其他一些对象(不是superview)保留了mySubView。例如,您可以记录keepCount值以查看视图的保留/释放位置。

关于iphone - 不做dealloc,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2622902/

10-14 23:07