and*_*van 7 crash debugging xcode xcode-instruments
我正在使用ARC和应用程序崩溃说收到内存警告.我直接在设备(iPhone 4与iOS 7.0.2)上测试应用程序,并使用iOS 6的SDK的XCode 5编译.我使用过苹果乐器,我分配了大约20MB的LiveBytes.

4-5分钟后,我的应用程序有30mb的内存.

在设备上编译和测试应用程序后,我会在几分钟之后看到崩溃,就在内存警告消息之后.为什么不使用仪器发生碰撞?但是我试图将这个问题清除一个月并且不能得到礼物,我真的需要帮助.看起来我没有任何泄漏,但我找不到哪里出错了.提前感谢任何建议.
我解决了这个问题。就我而言,内存压力是由于运行循环周期不断使用内存造成的。该循环每秒执行一次,并处理必须在视图中分析和呈现的数据。另一件事是,该项目最初并没有使用 ARC。将项目转换为 ARC 后出现该问题。
\n\n在将项目转换为ARC之前,在循环结束时我直接调用了资源的释放。当然,对于 ARC,这是自动完成的,问题就是这样。因此,对于运行循环的类,我返回到非 ARC 版本,并使用手动制作的技巧来释放我使用的资源。
\n\n自动释放池块提供了一种机制,您可以通过该机制放弃对象的所有权,但避免立即释放对象的可能性(例如当您从方法返回对象时)。通常,您不需要创建自己的自动释放池块,但在某些情况下您必须这样做,或者这样做是有益的。
\n\n@autoreleasepool {\n // Code that creates autoreleased objects.\n}\nRun Code Online (Sandbox Code Playgroud)\n\n在自动释放池块的末尾,块内收到自动释放消息的对象将被发送一条释放消息\xe2\x80\x94,每次在块内发送自动释放消息时,对象都会收到一条释放消息。
\n\n您可以在代码的任何部分放置 @autoreleasepool 块,但是您确实不应该做我认为您正在做的事情。
\n\n自动释放的效率比允许 ARC 添加保留和释放调用要低得多,而且可能不安全。Autorelease 将所有对象放入“池”中,然后当超出范围和/或决定转储池时,它会“耗尽”池,并且对象的保留计数会减一。
\n\n简短的回答:完全忽略@autorelease块,除非Apple在文档或模板中另有说明(例如,main.m中将有一个@autoreleasepool)。
\n\n这意味着您的对象可能会在您真正想要的之前被释放。当您有一个非常紧密的代码循环需要实例化然后丢弃大量对象时,@autoreleasepool 块更有用。例如,一个 for 循环处理一个巨大的数据库并分配字符串对象,然后使用这些字符串对象来填充您创建的类的实例的属性。在这种情况下,当您处于 for 循环内时,ARC 可能无法可靠地释放这些对象,并且您可能需要创建一个自动释放池。
\n\n然而,ARC 在紧密循环中没有做正确的事情的情况并不常见。它实际上更像是一个非 ARC 概念,您使用 NSAutoreleasePool 并手动耗尽它。
\n\n\n\n我希望我已经帮助其他人解决了同样的问题。
\n