验证对象释放

时间:2011-06-13 15:31:11

标签: ios memory-management

在我的应用程序的某个时刻,我正在发布我使用的对象:

[myObject release];

我感觉有些东西在那里没有真正起作用(我有一个我无法捕捉的错误,我假设它与内存分配有关)。我试图在调试器中查看它,看起来在“释放”行运行后对象仍然具有相同的值。

我错过了什么吗?

内存是否仍在分配并在其他地方被解雇?如果是这样,在哪里?

2 个答案:

答案 0 :(得分:2)

当释放内存时,通常不会将其清零。这意味着即使在解除分配之后,对象似乎仍然保持其状态 - 但您不能再使用它们,因为内存内容可以在任何时候被其他内容重用和覆盖。

一个常见的简单技巧是向dealloc添加日志记录语句:

- (void) dealloc
{
    NSLog(@"Say bye to %@, kids!", self);
    [super dealloc];
}

这很简单,不会出错。当你正在调试时,这是一件好事,并希望对某些事情保持100%的肯定。

另一个不错的工具是zombies。设置特殊环境变量时,计算机将保护对所有对象的访问权限,并在您尝试访问已释放的对象时发出尖叫声。它也是一个非常可靠的工具。

然后是retainCount。它可能与您正在寻找的内容非常接近,但它是not very dependable,因为背景中有很多事情要发生。如果你知道自己在做什么,就应该只使用它。

答案 1 :(得分:-3)

而不是释放它,试试,

myObject=NULL;

NSLog(@"Retain count of myObject is %d", [myObject retainCount]); // Since retainCount returns an integer, we use %d to display it 

您将看到其零售额为0。

您还可以检查myObject值

NSLog(@"myObject Value after NULL = %@", myObject); 

NULL =(null)后的myObject值