我在超级视图中有这个:
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/