我的应用程序有一个线程,耗时工作超过一分钟,该应用程序消耗大约6.8MB的内存.我会在一段时间后收到内存警告,然后它会被杀死.我没有什么可以发布的,我甚至没有使用7MB的内存......让我发疯了...请问有什么建议吗?
我的iPad应用程序大量使用自动旋转.这很棒.然而,我注意到,如果一个隐藏的视图是由默认实现释放didReceiveMemoryWarning(如描述在这里),当画面从笔尖重新加载,我正好是在景观,它加载它的肖像.这会对界面造成严重破坏,直到我手动旋转iPad并强制它进入正确的方向.
我原以为iOS会在当前方向加载视图; 这就是应用程序启动时的功能.但它没有,不是在被卸下之后didReceiveMemoryWarning.为什么不?我怎么能这样做呢?
关于didReceiveMemoryWarning/ 的问题viewDidUnload.
如果我的应用程序有很多视图控制器,其中一个显示,其他人回来(因为我使用导航控制器或标签栏控制器,没关系),哪个视图控制器将接收didReceiveMemoryWarning/ viewDidUnload,所有这些只是隐藏,还是只显示?
是否可能显示VC接收didReceiveMemoryWarning但是没有viewDidUnload(因为如图所示,它没有任何意义).
顺便说一句,看到这个图后我有这些问题:

非常感谢您的帮助.
据我了解,我们需要在MonoTouch中处理它们时保持对Cocoa对象的引用.这样做的原因是ObjC运行时可能仍然保持对对象的引用,如果我们没有"MonoTouch引用",它们可能被垃圾收集,这会导致EXC_BAD_ACCESSObjC运行时尝试访问它们.
比如,我们有两个UIViewController子类,VC1和VC2.如果用户单击VC1上的按钮,则UI导航到VC2,用户可以来回导航.如果我每次用户导航到VC2时都会创建一个新的VC2实例,那么对旧实例的引用就会丢失,因此它们会被垃圾收集,并且应用程序会在下次didReceiveMemoryWarning传播到UIViewControllers 时崩溃.
如何释放旧引用,所以我不必每次都使用相同的VC2实例?Dispose似乎还不够.
garbage-collection objective-c uiviewcontroller xamarin.ios didreceivememorywarning
我以前从未亲眼见过didReceiveMemoryWarning.是否有一个已知的内存使用阈值被调用?
我有一个巨大的同步过程,我下载并解压缩400-500个XML文件,然后解析它.有了这些数据,我将创建大量的核心数据对象RestKit API.一开始,我有一个内存警告,活动字节为450mb +,因为我没有使用自动释放池,只是试图在最后保存核心数据.
我修复了这个问题,现在经常保存到核心数据和使用 @autoreleasepool块.当我现在使用乐器运行我的应用程序时,我可以看到实时字节仅为20mb-30mb,总是释放内存并且永远不会增加大小.这个过程很有效.但是当我在没有乐器的情况下启动应用程序时,在查看文件后我得到了一个Memory Warning.稍后应用程序崩溃.
使用和不使用instruments工具运行应用程序之间有什么区别?为什么它以不同的结果结束?
我最近注意到,有时我们的应用程序在收到内存警告后立即崩溃.在设备上重现这个问题非常困难,甚至在模拟器中我也可能在"模拟内存警告"的十次尝试中遇到这种情况.
调试内存警告处理程序的好策略是什么,考虑问题通常来自"太迟"的回调,在警告处理程序中被销毁后意外使用的资源等等?
我正在解析一个大约53 MB的iPad上的JSON文件.解析工作正常,我正在使用Yajlparser这是一个SAX解析器,并设置如下:
NSData *data = [NSData dataWithContentsOfFile:path options:NSDataReadingMappedAlways|NSDataReadingUncached error:&parseError];
YAJLParser *parser = [[YAJLParser alloc] init];
parser.delegate = self;
[parser parse:data];
Run Code Online (Sandbox Code Playgroud)
到目前为止一切正常,但JSON文件变得更大,现在我突然在iPad 2上遇到内存警告.它收到4个内存警告,然后崩溃.在iPad 3上,它可以完美运行,没有任何内存警告.
我已经开始使用Instruments进行分析并发现了很多CFNumber分配(我已经在几分钟之后停止了仪器,我已经运行它直到崩溃并且CFNumber事件大约为60 mb或更多).

打开CFNumber详细信息后,它显示了一个巨大的分配列表.其中一个向我展示了以下内容:

还有一个在这里:

那么我做错了什么?这个数字(例如最后一张图片中的72.8%)代表什么?我正在使用ARC,所以我没有做任何发布或保留等等.
谢谢你的帮助.干杯
编辑:我已经问过如何在这里解析如此庞大的文件的问题:iPad - 解析一个非常巨大的json - 文件(介于50和100 mb之间)
所以解析本身似乎很好.
json memory-management objective-c didreceivememorywarning ios
我正在和他一起玩很多视频AVPlayer.为了减少加载时间,我将相应的视图存储在一个NSCache.
这可以正常工作,直到达到一定数量的视频,视频只是停止播放,甚至出现.
没有错误,日志或内存警告.特别是,我正在听UIApplicationDidReceiveMemoryWarningNotification清除缓存但是从未收到过.
如果我删除缓存,所有视频都会以较差的性能为代价.
这让我怀疑AVPlayer是使用来自不同进程的内存(哪一个?).当记忆达到一定限度时,新玩家将停止工作.
它是否正确?
如果是这样,是否有办法在达到此魔术限制时通知采取适当的措施(例如,清除缓存)以确保播放其他媒体?
我所做的就是从这种方法的视角中释放任何东西,但我的直觉告诉我,我可能做错了.
在大多数情况下,应该杀死什么样的资源 didReceiveMemoryWarning?
ios ×8
objective-c ×4
iphone ×2
memory ×2
autorotate ×1
avplayer ×1
instruments ×1
ios6 ×1
json ×1
restkit ×1
video ×1
warnings ×1
xamarin.ios ×1