标签: memory-warning

为什么我只分配7 MB内存就会收到内存警告?

我正在iPod touch设备上运行我的iOS应用程序,即使总分配峰值仅为7 MB,我也会收到内存警告,如下所示(当按下游戏场景时会发生这种情况):

低记忆警告

什么我觉得奇怪的是:

  • 左峰(在时间0.00),对应于20 MB的内存分配(简介场景),尽管这并没有给出任何内存警告.

  • 中心峰(在时间35.00)对应于raughly 7 MB的所分配的存储器(游戏场景正在被推动)和DOES给存储器的警告.

如果总内存只有7 MB,我不明白为什么会收到这些警告.这是正常的吗?我怎么能避免这个?

密度峰值

查看分配密度,我们可以看到以下模式,对于我来说,在推动介绍场景的时刻(0.00)与推动游戏场景的时刻(35.00)之间没有显示出太大差异.由于密度峰值相似,我认为记忆警告是由于我无法发现的其他东西.

编辑:

我一直在遵循建议使用"活动监视器",但不幸的是我的应用程序在加载游戏场景时崩溃,只分配了30 MB的内存.这是活动监视器报告.

活动监控报告

查看报告,我可以看到总实际内存使用量总和约为105 MB.鉴于这应该参考RAM内存并且鉴于我的模型应该有256 MB的RAM,这不应该导致APP崩溃或内存泄漏问题.

我运行Leak监视器,它在我的应用程序上没有显示任何泄漏.我也杀死了所有其他应用程序.

但是,在分析报告时,我看到与我的应用程序相关的惊人的167 MB虚拟内存值.这是正常的吗?这个值意味着什么?这可能是坠机的原因吗?如何检测代码的哪些区域对此负责?

虚拟内存

我的iPod是第四代机型,容量为6.4 GB(内存),只有290 MB无内存.我不确定这是否会以某种方式影响虚拟内存分页性能.

编辑2:我也更注重SpringBoard,其虚拟内存使用量为180 MB.这是正常的吗?我发现一些问题/答案似乎表明SpringBoard负责自动释放对象(它应该是管理屏幕和主页的过程,但我不确定它是否也与内存管理有关).它是否正确?

另一个说明.我正在使用ARC.但是我不确定这对问题有多大帮助,因为没有明显的内存泄漏,XCode应该转换代码,将release/dealloc/retain调用添加到已编译的二进制文件中.

编辑3:如前所述我使用ARC和Cocos2d(2.0).我一直在玩Activity监视器.我发现如果我删除了GameCenter身份验证机制,那么Activity Monitor运行正常(新疑点:是否有其他人遇到过类似问题?GameCenter身份验证视图是否保留在某处?).但是我注意到每次我在GameScene(初始场景 - >角色选择 - >行星选择 - >角色选择 - >行星选择 - >等等 - >字符选择......)之前的各种场景中前后导航.REAL MEMORY使用量增加.过了一会儿,我开始得到内存警告,应用程序被iOS杀死.现在的问题是:

- >我是以正确的方式更换场景吗?我从各种场景中调用以下内容:

[[CCDirector sharedDirector] replaceScene: [MainMenuScene scene]];
Run Code Online (Sandbox Code Playgroud)

我有Cocos2d 2.0作为静态库,replaceScene的代码是这样的:

-(void) …
Run Code Online (Sandbox Code Playgroud)

memory-management ios memory-warning

22
推荐指数
1
解决办法
1万
查看次数

有没有办法手动向iPhone设备发送内存警告?

这几天我遇到了一个问题.我正在使用图像缓存库,它运行良好,但最终我遇到了内存问题,应用程序只是自行退出(我想这是因为它只是耗尽了内存).从图像缓存库中读取源代码后,我发现当有内存警告事件时,它会释放所有缓存的图像(图像很大).无论如何,我是否手动直接向设备发送内存警告事件?我正在使用xcode仪器工具来评估内存使用情况.

iphone xcode cocoa-touch ios memory-warning

14
推荐指数
2
解决办法
7969
查看次数

当内存不足时自动警告我的Java应用程序有什么好方法?

当可用内存达到某个阈值时,是否有一种优雅的方法可以自动向我的Java应用程序发出内存警告?

请注意,这是一个Jeopardy风格的问题,我已经有了答案,只是想在这里发布以供世界发现,因为解决方案帮助了我一堆.

java memory jvm memory-warning

9
推荐指数
1
解决办法
2176
查看次数

Xcode内存警告 - 无法加载任何Objective-C类信息

我一直在使用Facebook和Parse登录用户时在旧版iPhone4上收到此错误.当我在模拟器上运行它时,这个错误永远不会发生.

当它发生时,应用程序仅从内存中获取21.2MB,这只是我测试4s上可用内存的4.2%.

我不确定从哪里开始以修复此错误.完全失去了诚实.

2015-11-12 08:09:27.647 APPNAME [3883:426582]收到内存警告.警告:无法加载任何Objective-C类信息.这将显着降低可用类型信息的质量.(LLDB)

关于这个问题的一些更新,如果你仍然认为它是重复的,我将删除它.虽然您建议作为副本的问题实际上并没有帮助我解决问题.

我可以通过减少同时发生的查询数量并使用Parse来部分删除错误.该应用程序是为了首次启动并注册一个新用户,我需要:

  • 用facebook登录
  • 查询facebook图形数据
  • 将Facebook图形数据添加到Parse用户
  • 创建声誉表和关联
  • 启动主屏幕
  • 查询声誉
  • 查询条款和条件
  • 查询教程状态

通过删除最后两个,我可以在应用程序使用的第一秒内收到警告消失.然后,在让应用程序无需交互的情况下运行10分钟后,我收到警告/错误.

这让我觉得,如果你在背景上同时发生很多查询会导致这种类型的内存警告吗?或者这是纯粹的Xcode上的一个错误,正如另一个问题所暗示的那样?

memory-warning parse-platform facebook-sdk-4.0 swift

8
推荐指数
1
解决办法
1万
查看次数

所有iPad版本的内存警告阈值

适用于iOS应用的内存警告级别1和级别2.问题是所有iPad设备(从iPad 1到iPad 4,mini),发出警告的响应阈值是多少.例如,对于iPad1,那是100 MB吗?

谢谢


我还习惯打印出收到内存警告时使用的内存.

#import "mach/mach.h"
-(void) report_memory {

    struct task_basic_info info;
    mach_msg_type_number_t size = sizeof(info);
    kern_return_t kerr = task_info(mach_task_self(),
                                   TASK_BASIC_INFO,
                                   (task_info_t)&info,
                                   &size);
    if( kerr == KERN_SUCCESS ) {
        DLog(@"Memory in use (in MB ): %u", info.resident_size/1024/1024);
    } else {
        DLog(@"Error with task_info(): %s", mach_error_string(kerr));
    }
}
Run Code Online (Sandbox Code Playgroud)

memory ipad ios memory-warning

4
推荐指数
1
解决办法
2147
查看次数

使用UIImagePickerController时的内存警告

我在iPhone上使用相机时会收到内存警告.我也在使用ARC.

当您拍照并按下相机视图控制器上的"使用照片"按钮时,我会收到内存警告.目的是按下"使用照片"按钮,它会改变ImageView的内容.

我认为内存问题可能是由于捕获的图像是全屏的,而ImageView是250h 250w.但我尝试缩小相机拍摄的图像大小,然后将其分配给ImageView.然而,即使我将其调整为100 x 100,这仍然无效.

其次,我没有将相机拍摄的照片分配给ImageView,但它仍然有内存警告.

我在这里查看了其他答案并尝试了上面的两个,但它仍然存在.我将在下面显示我的代码.这会影响我对应用商店的提交吗?当然,如果这是一个常见的事件,它是一个错误或有一个解决方案?如果可以查看提供的代码并发现错误或建议如何处理此内存警告,那将会很棒?

我的应用程序是95 +%完成除了此内存警告,所以它接近提交时间.

我的代码:

- (IBAction)takePhoto:(id)sender {

self.imagePicker = [[UIImagePickerController alloc] init];
self.imagePicker.delegate = self;
self.imagePicker.allowsEditing=NO;

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
     [self.imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
    [self presentViewController:self.imagePicker animated:YES completion:NULL];

}
else{
    [self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    [self presentViewController:self.imagePicker animated:YES completion:NULL];
 }



}

- (IBAction)choosePhoto:(id)sender {
self.imagePicker2 = [[UIImagePickerController alloc] init];
self.imagePicker2.delegate = self;
self.imagePicker2.allowsEditing=NO;
[self.imagePicker2 setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
[self presentViewController:self.imagePicker2 animated:YES completion:NULL];
}

-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{

self.image = [info objectForKey:UIImagePickerControllerOriginalImage];
CGRect rect = CGRectMake(0,0,100,100);

UIGraphicsBeginImageContext( rect.size );
[self.image drawInRect:rect]; …
Run Code Online (Sandbox Code Playgroud)

memory uiimagepickercontroller ios memory-warning

4
推荐指数
1
解决办法
6043
查看次数

使用VM跟踪器进行iOS分析.脏和常驻内存导致内存警告,我该怎么办?


你好社区,我正在尝试调试我没做的.这个应用程序在线工作并缓存文件系统上的所有内容,保存内存上的所有路径(很多路径)(我看到错误的方法,但我必须努力).这个应用程序有一个选项,可以下载所有内容并用相对路径填充内存.
问题是,当我检查此选项时,应用程序开始下载和缓存,但在它完成之前崩溃.在模拟器上一切正常.
崩溃报告日志讨论了由jetsam杀死的内存警告和应用程序.通过仪器上的分配来跟踪应用程序我发现实时字节"仅仅"大约7Mb,使用在下载期间添加的刷新机制也有帮助,在下载完成后释放旧路径.
根本没有明显的泄漏.
我开始使用VMTracker,我已经看到驻留和脏内存非常高,峰值在61Mb和21Mb左右.有一些我没有得到的东西.
我已经阅读了很多关于它的问题
"虚拟"和"居民"与虚拟记忆有什么关系?
如何摆脱Objective-C中的常驻脏内存?
但是,因为我发布了其他脏内存来自的大多数路径?我该如何清洁它?
谢谢,
安德烈

memory iphone memory-management ios memory-warning

2
推荐指数
1
解决办法
4487
查看次数

图像无法在内存中释放

我有图像单元格的表格.图像从互联网下载并保存在本地磁盘中.计数= 200.Tableview显示此图像.将内容滚动到底部时,会显示消息内存警告...已用内存250 - 300 mb O_O !!! 链接到不保留的图像.

NSString *cellID = @"cellId";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
...
NSString* imagePath = [arrayContent objectAtIndex:indexPath.row];
UIImage* image = [[UIImage alloc] initWithContentsOfFile:imagePath];
[cell.imageView setImage:image];
Run Code Online (Sandbox Code Playgroud)

为什么隐藏图像不释放?

image ios memory-warning

2
推荐指数
1
解决办法
3802
查看次数