pse*_*ach 0 iphone memory-leaks objective-c
和
我编写了以下代码来切换子视图:
@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
Run Code Online (Sandbox Code Playgroud)
如果我注释掉释放线,它似乎运行正常,但我无法理解为什么.这是我理解发生了什么的方式,也许有人可以告诉我哪里出错了:
所以我们考虑一下currentView:
A由"新"消息分配 - 保留计数= A:1
A由setter保留 - 保留计数= A:2
A的视图得到(据称)保留 - 保留计数= A:2.1
下次通过......
A的子视图被释放count = A:2
B由"新"消息分配 - 保留计数= B:1,A:2
A由设定者自动释放 - B:1,A:1
B由设定者保留 - B:1,A:1
什么都没有摆脱A?
那么我应该更改我的代码,还是我错误地了解内存管理在这种语言中的工作方式......或者两者兼而有之?
好的,第一步,忽略了retainCount.这是Apple应该重命名的事情之一,lsdjiofsudfoiwjeriowhfiuwhrteiuhweifhsdjkfhsiurwoieuriosfho因此人们不会猜到它的名字,而不是在文档中列出它.出于您的目的,它完全没用,所以请忽略它.
现在我已经说过了,让我们考虑一下:addSubview:DOES保留其论点,并removeFromSuperview释放接收器.
最后,很难说是什么currentSubview.它有一个view倾向于VC 的属性,然而,你自己使用它的方式,将表明它是一个普通的视图.也许你可以澄清所以我可以继续我的答案.
| 归档时间: |
|
| 查看次数: |
340 次 |
| 最近记录: |