目标c - 正确释放UIVIewController的方法

时间:2011-09-12 10:33:07

标签: objective-c ios4 memory

我在发布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 ???

2 个答案:

答案 0 :(得分:4)

  • 您拥有
  • 时创建的任何对象
  

使用名称以“alloc”开头的方法创建对象,   “new”,“copy”或“mutableCopy”(例如,alloc,newObject或   mutableCopy)。

  • 当你不再需要它时,你必须放弃一个人的所有权 你拥有的对象
  

您通过向对象发送释放消息来放弃对象的所有权   或自动发布消息。在可可术语中,放弃   因此,对象的所有权通常被称为   “释放”一个物体。

  • 您不得放弃您不拥有的对象的所有权
  

这是以前的政策规则的必然结果   明确。

Memory Management Programming Guide

因此,您只需要一行代码

[viewT release];

答案 1 :(得分:1)

您可能有一个保留周期。笔尖中的任何物体是否都有连接到文件所有者的插座?该出口是否已宣布retain? (或strong如果你使用的是ARC,你不是。)将插座更改为assign(如果使用ARC,则更改为weak