我在发布UIView
控制器时遇到问题,这是我的代码。
当我按下按钮时,我在屏幕上放置了一个视图:
viewT = [[PersonalViewController alloc] initWithNibName:@"PersonalViewController" bundle:[NSBundle mainBundle]];
//In this moment the retainCount is 1
[[AppDelegate appDelegate].window insertSubview:viewT.view aboveSubview:[AppDelegate appDelegate].dockController.view];
[viewT release];
//Now the retain count is 3!
//... After some code, when the user press another button, I want to release the view
[viewT.view removeFromSuperview];
//After this line, the object stills there, with a retain of 2.
所以它正在发生,我不明白。我一直在读关于记忆的指南,我之前从未遇到过这个疑问,我做错了什么?我怎样才能完全释放viewT
???
答案 0 :(得分:4)
使用名称以“alloc”开头的方法创建对象, “new”,“copy”或“mutableCopy”(例如,alloc,newObject或 mutableCopy)。
您通过向对象发送释放消息来放弃对象的所有权 或自动发布消息。在可可术语中,放弃 因此,对象的所有权通常被称为 “释放”一个物体。
这是以前的政策规则的必然结果 明确。
Memory Management Programming Guide
因此,您只需要一行代码
[viewT release];
答案 1 :(得分:1)
您可能有一个保留周期。笔尖中的任何物体是否都有连接到文件所有者的插座?该出口是否已宣布retain
? (或strong
如果你使用的是ARC,你不是。)将插座更改为assign
(如果使用ARC,则更改为weak
。