我正在设备上直接测试应用程序(带有iOS 7.0.2的iPhone 4),并使用iOS 6 SDK使用XCode 5进行编译.
我使用过苹果乐器,我分配了大约20MB的liveBytes.
4-5分钟后,我的应用程序有30mb的内存.
在设备上编译和测试应用程序后,我会在几分钟之后看到崩溃,就在内存警告消息之后.为什么不使用仪器发生碰撞?
但是我试图将这个问题解决一个月并且不能得到礼物,我真的需要帮助.
看起来我没有任何泄漏,但我找不到哪里出错了.
提前感谢任何建议.
在将项目转换为ARC之前,在循环结束时,我直接呼吁释放资源.使用ARC当然这是自动完成的,问题就是这样.因此,对于运行循环的类,我返回到非ARC版本,我使用这些技巧手动释放我使用的资源.
自动释放池块提供了一种机制,您可以放弃对象的所有权,但避免立即释放它(例如从方法返回对象时).通常,您不需要创建自己的自动释放池块,但在某些情况下,您必须或者这样做是有益的.
@autoreleasepool { // Code that creates autoreleased objects.}
在自动释放池块的末尾,在块中接收到自动释放消息的对象被发送释放消息 – 对象在每次在块内发送自动释放消息时接收释放消息.
你可以在代码的任何部分放置@autoreleasepool块,但是你真的不应该做我认为你正在做的事情.
自动释放的效率远低于允许ARC为您添加保留和释放呼叫的效率,而且可能不安全. autorelease将您的所有对象放在“池”中,然后当您超出范围和/或每当它决定转储池时,它“排空”池并且对象的保留计数减1.
简短的回答:完全省略@autorelease块,除非Apple在文档或模板中另有说明(例如,main.m中将包含@autoreleasepool).
这意味着您的对象可能会在您真正想要它们之前被释放.当你有一个非常紧密的代码循环来实例化然后丢弃大量的对象时,@ autoreleasepool块会更有用.例如,一个for循环,它处理一个巨大的数据库并分配字符串对象,然后使用这些字符串对象来填充您创建的类的实例的属性.在这种情况下,当您在for循环中时,ARC可能无法可靠地释放这些对象,您可能需要创建自动释放池.
但是,ARC在紧密循环中没有做正确的事情并不常见.它实际上更像是一个非ARC概念,你使用NSautoreleasePool并手动排空它.
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html#//apple_ref/doc/uid/20000047-CJBFBEDI
我希望我帮助其他人解决同样的问题.
总结以上是内存溢出为你收集整理的xcode – 如何调试由于内存压力导致的iOS崩溃全部内容,希望文章能够帮你解决xcode – 如何调试由于内存压力导致的iOS崩溃所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)