NSString 是ios最常用的类,一个应用无非包含文字,图片,视频多媒体。NSString 自然是应用里面使用最频繁的,最容易使用的。越是最简单,越不注意细节,下面举例。
在电商应用中,经常在商品列表显示该商品一共成交了多少笔,因此在返回的商品列表数据中拼接需要的文字,然后再显示,逻辑没问题。一般的代码都会这么写
NSString*countString = [NSString stringWithFormat:@"成交%ld笔",(long)goodsItemModel.salesCount];
cell.concludeLabel.text = countString;
我也还特意问了身边的同事,都是有几年的开发经验,觉得这是没什么毛病的。
大家细想一下,NSString提供的类方法给我们拼接字符串,是不是也分配一块内存放这些字符串。虽然我们没有调用alloc 的方法,但是类方法内部还是帮我们实现了这个方法。虽然一个字符串不会多少内存,但是大量的商品的列表,是不是需要很大块内存?我们平时想方设法优化UITableView,但是对于这些细节却不是在乎,当我们滚动商品列表的时候,上述的两个方法是不是不断地重复执行,来回滚动视图,就会导致字符串不断地重复创建,大家可以自己使用instrument自行查看,来回滚动,看NSString 这个类分配的内存是不是持续增加?来回滚动,一般都差不多以0.02Mb的速度在增加,从细小的地方优化自己的内存,能省则省。
我个人优化的方法最简单的,就是在定义的model增加一个字段,来接受这些拼接的字符串,同样的适用其他NSMutableAttributedString类,NSMutableAttributedString这个实现消耗更多的内存,这个主要在于要定义不同位置的字体大小颜色等。
好的,下次在开发中遇到其他细节,再来说。