iOS - 在 Today Extension 上显示图像时收到内存警告

Posted

技术标签:

【中文标题】iOS - 在 Today Extension 上显示图像时收到内存警告【英文标题】:iOS - Received memory warning for showing an image on Today Extension 【发布时间】:2015-05-03 08:11:20 【问题描述】:

我正在尝试从 RSS 提要下载图像,然后在今天的扩展小部件中显示它,问题甚至是显示一个简单的图像会导致内存警告!:

_imageView.image = [UIImage imageName:xxx.jpg];

这是我使用UIImageView+AFNetworking下载图像的代码:

[_wImage setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[item.imagesFromContent objectAtIndex:0]]]

甚至尝试过NSData

  [_wImage setImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:
                                                  [NSURL URLWithString:[item.imagesFromContent objectAtIndex:0]]]]];

结果还是Received memory warning.

【问题讨论】:

内存警告并不意味着您编写了错误的代码。这意味着您占用的空间比预期的要多。您应该更改您的实现以避免内存警告。内存泄漏和内存警告之间也有区别 @InderKumarRathore 是的,但是小部件崩溃了!!!! 您下载的数据大小是多少? @vivekDas 在 100 到 200 kb 之间 【参考方案1】:

扩展程序的内存限制比普通 ios 应用程序低得多。我建议重新考虑您的架构并减少扩展本身的工作。

【讨论】:

我认为你是完全正确的。我们可以找出扩展的内存限制是多少吗?【参考方案2】:

问题解决了!对于那些将面临这个问题的人,您必须通过以下方式调整图像大小:

-(UIImage *)resizeImage :(UIImage *)theImage :(CGSize)theNewSize 
    UIGraphicsBeginImageContextWithOptions(theNewSize, NO, 1.0);
    [theImage drawInRect:CGRectMake(0, 0, theNewSize.width, theNewSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;

我的图像为 1024 x 768,大小为 100 到 200 kb!因此,使用此代码可以缩小其大小并节省大量内存。

【讨论】:

以上是关于iOS - 在 Today Extension 上显示图像时收到内存警告的主要内容,如果未能解决你的问题,请参考以下文章

Today Widget Extension 动画在 iOS 10 上不起作用

Xcode 在调试/运行 iOS8 App Today Extension 时将多个包含的应用程序安装到设备上

如何通过 Today Extension (iOS 8) 访问 Core Data/CloudKit

iOS Today Extension 中奇怪的 NSInternalInconsistencyException 和 PKService 崩溃

iOS - SharedApplication 在 Today Extension 中不可用?

iOS开发------Widget(Today Extension)插件化开发