在我的应用程序的某个时刻,我正在发布我使用的对象:
[myObject release];
我感觉有些东西在那里没有真正起作用(我有一个我无法捕捉的错误,我假设它与内存分配有关)。我试图在调试器中查看它,看起来在“释放”行运行后对象仍然具有相同的值。
我错过了什么吗?
内存是否仍在分配并在其他地方被解雇?如果是这样,在哪里?
答案 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值