4

我有一个流行的 iOS 应用程序,但我得到了一些总是在同一行的崩溃报告。我无法在我的一生中重现该错误,但我怀疑它与我不使用 ARC 的 3rd-Party 库有关,因此在不应该发布的时候发布了一些东西。

我尝试过模拟内存警告,并尝试使用 malloc 获取随机内存,但无法重现该错误。但它经常发生,足以让很多人每天都发电子邮件抱怨它。

我知道操作系统做了一些“清理”来释放需要自动释放的对象,但是有没有办法在模拟器中强制这样做?

4

1 回答 1

1

正在向已释放对象发送消息。

要么是某个东西试图与一个解除分配的 DBRequest 对话,要么是 DBRequest 试图与一个解除分配的对象对话。

最常见的原因是如果您执行以下操作:

[DBRequest setNetworkRequestDelegate:self];
DBRequest *myDBRequest = [DBRequest initWithURLRequest:request andInformTarget:self selector:@selector(doSomething)];

然后您开始一些网络活动,用户移动到另一个视图,该视图取消分配self,网络活动完成,并尝试通知self它已完成。

确保[myDBRequest cancel];在 100% 的情况下调用将被通知的对象将被释放。该dealloc方法通常是一个安全的地方。

于 2013-08-30T06:15:12.940 回答