阅读后: Memory management of a view controller in Objective-c整蛊内存管理
和
Does UIView's addSubview really retain the view?
我写了下面的代码来切换子视图:
@synthesize switchableView, viewSelector, currentSubview;
//...
if(switchableView.subviews.count != 0)
[[switchableView.subviews objectAtIndex:0] removeFromSuperview]]
self.currentSubview = (veiwSelector.selectedSegmentIndex == 0) ?
[ViewA new] : [ViewB new];
[switchableView addSubview:currentSubview.view];
//[currentSubview release]; //<---crashes if I uncomment this line
它似乎运行很好,如果我注释掉这条发行版,但我无法绕过原因。这是我理解的方式会发生什么,也许有人可以告诉我在哪儿出错:
所以,让我们考虑currentView:
一个由“新”的消息得到的alloc-ED - 保留计数=答:1
甲得到由设定器保持 - 保留计数= A:2
A的视图获得(假定)保留 - 保留计数= A:2.1
下一次通过...
A的子视图得到释放计数= A:2
乙通过 '新的' 消息获取的alloc-ED - 保留计数= B:1 1,A:1
- ,A::1,A:2
甲得到由setter--乙自动释放乙1个
B获得由设定器保持
什么都没有摆脱A?
所以我要改变我的代码,还是我错了的方式存储管理工作在这种语言...或两者 -
你有一个额外] removeFromSuperview – robev 2010-11-02 20:41:07