NSAttributedString装载图片与UIImageView装载图片对比

本文对比了NSAttributedString和UIImageView装载图片的性能,通过测试发现,UIImageView内存消耗稳定,不受图片大小影响,而NSAttributedString内存与图片大小成正比。在图片小的情况下,使用NSAttributedString更节省内存,大图则推荐使用UIImageView以避免内存飙升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、先简单介绍一下NSAttributedString如何装载图片:
NSAttributedString有一个类方法attributedStringWithAttachment:参数是NSTextAttachment,NSTextAttachment有一个叫做image的属性。所以自然就可以将一张图片插入到NSAttributedString中然后赋值给UILabel的attributedText。
示例代码如下:

NSTextAttachment *attachment = [[NSTextAttachment alloc] init];
attachment.image = [UIImage imageNamed:@"test.png"];
attachment.bounds = CGRectMake(0, 0, 100, 100);
NSAttributedString *attributed = [NSAttributedString attributedStringWithAttachment:attachment];
UILabel *label = [[UILabel alloc] init];
label.numberOfLines = 0;
label.attributedText = attributed;

这种方式可以方便的做图文混排。以及图文混编。笔者就用这种方式自定义了一个可以加入图片的TextView。

二、分析NSAttributedString与UIImageView装载图片的对比。

测试条件:
  1. 24张图片
  2. 图片高度
  3. 用NSAttributedString与UIImageView装载同样张数的图片做内存对比
测试过程:

写两个方法,分别是用NSAttributedString和UIImageView装载相同的图片,图片高度一样,然后做内存分析。

测试结果:
  1. 当kImageHeight=10的时候,NSAttributedString的内存截图是:
    这里写图片描述
    UIImageView的内存截图是:
    这里写图片描述
    从以上两个图可以看出,NSAttributedString完胜UIImageView。

  2. 当kImageHeight = 400的时候,NSAttributedString的内存截图是:
    这里写图片描述
    UIImageView的内存截图是:
    这里写图片描述

  3. 当kImageHeight = 1000的时候,NSAttributedString的内存截图是:
    这里写图片描述
    UIImageView的内存截图是:
    这里写图片描述

从以上测试结果可以看出,无论图片多大,UIImageView加载同样张数的图片,内存一直是25M左右,上下浮动也只有1M左右。而NSAttributedString所占内存与图片大小成正比,当图片高度只有10的时候,内存只有4M左右、当图片增到1000的时候,内存随之飙升到120M以上。

对比结果:

通过以上测试和分析。我们可以知道。UIImageView加载图片的内存,并不会随着图片增大而增大。事实上,UIImage的size是不可改变的,在UIImageView上拉大图片只是拉大UIImageView的frame,所以UIImageView的内存在图片确定的情况下,是不会随着UIImageView的frame改变而改变。相反,NSAttributedString所占用的内存却是和图片大小成正比。
图片较小的情况下,优先选择NSAttributedString,可以节省一部分内存,图片大的时候,应该选择UIImageView,不然内存会飙升,很容易收到内存警告

点击下载相关Demo代码

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南窗客斯黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值