我有一个流行的 iOS 应用程序,但我得到了一些总是在同一行的崩溃报告。我无法在我的一生中重现该错误,但我怀疑它与我不使用 ARC 的 3rd-Party 库有关,因此在不应该发布的时候发布了一些东西。
我尝试过模拟内存警告,并尝试使用 malloc 获取随机内存,但无法重现该错误。但它经常发生,足以让很多人每天都发电子邮件抱怨它。
我知道操作系统做了一些“清理”来释放需要自动释放的对象,但是有没有办法在模拟器中强制这样做?
我有一个流行的 iOS 应用程序,但我得到了一些总是在同一行的崩溃报告。我无法在我的一生中重现该错误,但我怀疑它与我不使用 ARC 的 3rd-Party 库有关,因此在不应该发布的时候发布了一些东西。
我尝试过模拟内存警告,并尝试使用 malloc 获取随机内存,但无法重现该错误。但它经常发生,足以让很多人每天都发电子邮件抱怨它。
我知道操作系统做了一些“清理”来释放需要自动释放的对象,但是有没有办法在模拟器中强制这样做?
正在向已释放对象发送消息。
要么是某个东西试图与一个解除分配的 DBRequest 对话,要么是 DBRequest 试图与一个解除分配的对象对话。
最常见的原因是如果您执行以下操作:
[DBRequest setNetworkRequestDelegate:self];
DBRequest *myDBRequest = [DBRequest initWithURLRequest:request andInformTarget:self selector:@selector(doSomething)];
然后您开始一些网络活动,用户移动到另一个视图,该视图取消分配self
,网络活动完成,并尝试通知self
它已完成。
确保[myDBRequest cancel];
在 100% 的情况下调用将被通知的对象将被释放。该dealloc
方法通常是一个安全的地方。