【发布时间】:2011-08-28 21:47:18
【问题描述】:
我的应用中有一个对象被声明为实例变量。
URLRequest * myRequest
当我去使用这个类时,我:
myRequest = [[URLRequest alloc] init];
然后当我完成它时,我:
[myRequest release];//or dealloc does the same
这里是更多代码:https://gist.github.com/1177739 过去的事情太多了。
但是,当我再次使用该类时,它会通过 alloc 和 init,但我的应用程序崩溃了。
被释放的指针未被分配
我不明白这一点,因为我再次分配和初始化。如果我不释放,我的应用程序会出现内存泄漏。谢谢
【问题讨论】:
-
这些方法是什么 - 让我们看看要重现的最少代码 - 在获得最低限度时,您很可能自己就能看到问题
-
我必须对您的评论发表评论。除非子类化 dealloc 方法并调用 [super dealloc],否则您永远不会调用 dealloc。绝不。曾经。不,它与释放不同,释放减少对象的retainCount,而dealloc在retainCount达到0时(自动)销毁它。关于你的问题,请告诉我们更多,你在哪里分配和释放这个?
-
@Luke:设置一个指向
nil的指针意味着你不能再向该对象发送消息;这意味着您无法释放它,并且您有泄漏。有时会设置一个指向nilnil的指针在释放后,以确保您不会意外地向已释放对象发送消息。 -
@Mike007:我怀疑很多人会去 GitHub 阅读所有代码。请在您的问题中发布相关部分。只需编辑问题并复制并粘贴相关代码即可。
标签: iphone objective-c ios macos