【发布时间】:2011-05-04 03:59:48
【问题描述】:
阅读后: 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:
A 被“新”消息分配--retain count=A:1
A 被 setter 保留--retain count=A:2
A 的视图被(假定)保留--retain count=A:2.1
下次通过...
A 的子视图被释放 count=A:2
B 被“新”消息分配--retain count=B:1, A:2
A 被 setter 自动释放 -- B:1, A:1
B 被 setter 保留--B:1, A:1
没有什么能摆脱 A?
那么我应该更改我的代码,还是我对这种语言中内存管理的工作方式有误...或两者兼而有之?-
【问题讨论】:
-
在 removeFromSuperview 之后你有一个额外的 ]
标签: iphone objective-c memory-leaks