据我所知,有两级内存警告。 applicationDidReceiveMemoryWarning不带有警告级别。有没有办法获得这些信息?applicationDidReceiveMemoryWarning中的内存警告级别
回答
我把这个作为一个单独的答案比我的另一个添加,因为它是一个单独的答案。我之前给出的答案是实际的,你应该使用的。它归结为“处理你通知的一个级别的记忆警告,不关心细节”。
但是,如果你真的想知道更多一点,看看这个未公开的API:http://www.opensource.apple.com/source/Libc/Libc-594.1.4/include/libkern/OSMemoryNotification.h
这是产生记忆警告,内核代码的头,而且它声明了以下的typedef:
typedef enum {
OSMemoryNotificationLevelAny = -1,
OSMemoryNotificationLevelNormal = 0,
OSMemoryNotificationLevelWarning = 1,
OSMemoryNotificationLevelUrgent = 2,
OSMemoryNotificationLevelCritical = 3
} OSMemoryNotificationLevel;
我们显然没有执行数学运算来说明要返回哪个警告的关键方法(OSMemoryNotificationCurrentLevel()
),但这是可能返回值的列表。
您可以使用Mach.h库来测试设备上的实际内存级别(如果您想要某些代码,请告诉我),然后使用OSMemoryNotificationCurrentLevel()
获取当前级别的内存警告,并确实将通知级别映射到机器的物理状态。这样的应用程序在应用程序商店中完全不受欢迎,并且它不会真正帮助您实际的生活发展,您的工作是响应您收到的单一级别的低内存警告。
这并不是说有两个级别的警告 - 不是像“你有一点点内存剩余”,然后“你剩下的内存少”。这是相同的“低内存”警告被解雇了两个地方。一旦在当前视图中的UIViewController子类上(并且,如果该UIVC没有实现didReceiveMemoryWarning
,那么它将冒泡到视图控制器堆栈的顶部)并且再次在applicationDidReceiveMemoryWarning
中的应用代理上。一个人不是比另一个更糟糕的警告,他们只是两个不同的钩子来执行对来自操作系统的相同警告的响应。
这是平台的怪癖之一,你不能真正知道你有多少内存可用在任何时间。后台应用程序(邮件,电话等)吸收尽可能多的RAM,剩下的就剩下剩下的事情了,而且只有这样才能知道自己变得太大了。
通过抛弃现在不需要的资源,恰当地做出反应非常重要。从低垂的果实开始 - 任何你以后需要保留的东西。举例来说,您可以随意拖放图像,然后在需要时从服务器或磁盘中取出图像。
我完全同意,但我不确定我们在谈论同样的事情。起初我没有实现任何提到的内存警告方法。结果发生的是以下几点。在应用程序中瞎弄后,我在调试控制台中收到以下消息: “2010-08-06 11:12:42.880 blaApp [9591:207] Received memory warning。Level = 1” 我一直在做什么我做了,几秒钟后,我得到了 “2010-08-06 11:12:55.171 blaApp [9591:207]收到内存警告。我想知道的是这个级别的属性。 – user309305 2010-08-06 09:20:36
- 1. 如何解决内存警告级别1,然后内存警告级别2?
- 2. iPhone内存警告级别= 2
- 3. 接收内存警告级别= 1,级别= 2然后崩溃
- 4. 收到内存警告。 Webview中的级别= 1
- 5. 如何解决ipad中的内存警告级别1?
- 6. 收到内存警告。等级= 2和级别= 1在cocos2d
- 7. 警告:接收到的内存警告级别为1并且崩溃
- 8. 获取“接收到的内存警告级别= 1”
- 9. 由于UIImage引起的内存警告级别1
- 10. 自定义过时的警告,在c#中抛出级别4的警告,而不是级别2的警告#
- 11. IntelliJ提交警告级别
- 12. snmp4j警告日志级别
- 13. QT警告级别暗示
- 14. 我如何删除内存警告级别= 2
- 15. 收到内存警告。当显示UIImagePickerController时级别= 1
- 16. 内存警告级别指示器 - iPhone SDK
- 17. 收到内存警告。等级= 1
- 18. 收到内存警告[1级]
- 19. 收到内存警告。 1级
- 20. 警告接收到内存警告。等级= 2 iPhone
- 21. 如何在Monotouch 6.2(Xamarin.iOS)中访问DidReceiveMemoryWarning中的当前内存警告级别?
- 22. ipad - 内存警告级1,2,但仍有足够的内存
- 23. 内存警告UIImagePickerController
- 24. GPUImage内存警告
- 25. UIImagePickerController内存警告
- 26. 警告级别不显示log4net的
- 27. 关于级别对象的CA2000警告
- 28. SonarQube:抑制功能级别的警告?
- 29. 我们如何处理iPhone中的内存级警告?
- 30. 收到的内存警告
我明白了。并且非常感谢这些信息,这非常有用。我的想法是,如果我在警告2级后才被踢掉,也许我可以利用这一点,并且只在警告级别2时才会真正做出令人痛苦的阻碍。 – user309305 2010-08-06 13:23:35
我认为警告级别二意味着“你现在要离开了”。在实践中,你会得到一杆。您可能会在应用程序的整个生命周期中多次获得一次,但没有“建议”级别的内存警告。你应该认真对待你的第一个警告。 – 2010-08-06 14:08:24
确实有人使用这个存储目标应用程序?我的意思是,我不想让应用程序被拒绝= D – Omer 2011-05-09 18:29:04