iOS开发实践:控制代码段大小

栏目: IOS · 发布时间: 5年前

内容简介:因为苹果在审核的时候是会对你提交的工程的二进制文件中__TEXT段大小做限制。一般是比较大的项目中才需要注意这个问题,而我所在的项目恰好是一个有多年历史,而且功能巨多的项目。__TEXT段大小早已经触及苹果限制。所以每期开发工作不仅需要开发新需求,还需要对项目中的一些无用代码进行删除,给项目瘦身。路径如下:YourProduct-LinkMap-normal-x86_64.txt 也就是你的项目的linkmap文件。

1.为什么要关注代码段大小?

因为苹果在审核的时候是会对你提交的工程的二进制文件中__TEXT段大小做限制。一般是比较大的项目中才需要注意这个问题,而我所在的项目恰好是一个有多年历史,而且功能巨多的项目。__TEXT段大小早已经触及苹果限制。所以每期开发工作不仅需要开发新需求,还需要对项目中的一些无用代码进行删除,给项目瘦身。

2.如何查看代码段大小分布情况?

要想给代码段瘦身,首先需要知道具体哪块代码占用了多少空间。Xcode编译产生的linkmap恰好可以告诉我们这些信息。做法如下:

a.打开编译器开关,使编译产生linkmap文件

Xcode->Build Settings->Write Link Map File->YES

iOS开发实践:控制代码段大小

image.png

b.DerivedData路径下找到linkmap文件

路径如下:

/Users/username/Library/Developer/Xcode/DerivedData/YourProduct-ewieucoyokvtgsbihwymmdqjccpy/Build/Intermediates.noindex/YourProduct.build/Debug-iphonesimulator/YourProduct.build/YourProduct-LinkMap-normal-x86_64.txt

YourProduct-LinkMap-normal-x86_64.txt 也就是你的项目的linkmap文件。

c.分析linkmap文件
linkmap主要一下几个模块组成:

# Path# Arch: x86_64# Object files:# Sections:# Symbols:# Dead Stripped Symbols:

我们主要关注的是Object files和Symbols两个部分

Object files中数据如下:

[ 12] /Users/jlstmac/Library/Developer/Xcode/DerivedData/YourProduct-ewieucoyokvtgsbihwymmdqjccpy/Build/Intermediates.noindex/YourProduct.build/Debug-iphonesimulator/YourProduct.build/Objects-normal/x86_64/AppDelegate.o

也就是:

[ 12]可以看作是id,后面的AppDelegate.o就是AppDelegate这个类编译后的文件。

Symbols中数据如下:

# Address   Size        File  Name0x100020080 0x00000050  [ 12] -[AppDelegate(BackgroundLoadService) didEnterBackground]0x100020800 0x00000170  [ 12] -[AppDelegate(BackgroundLoadService) willEnterForeground]

Address为偏移量,size为这个方法的大小(十六进制),File为对应的id也就是Object files中的[ 12],把所有[ 12]的大小相加就是AppDelegate这个类编译后的大小。

这里可以通过脚本的方式统计各个类的大小,便于在代码瘦身的时候有所参考。

3.如何减小代码段大小

方法很多,这里例举一下我的项目中实际用到的做法。

a.尽量少的使用block,去掉Masonry代码

我们都知道block其实由c实现的匿名函数,虽然block很好用,但是它会急剧扩张代码段大小。原因是,由于block的特效,系统实现block的时候会拷贝帮我们实现拷贝功能,展开之后会生成很多代码。

介于block用处实在太大,彻底杜绝使用block不太现实,我们项目中的原则是把原来大量使用的Masonry实现布局的代码改成native直接布局,其他地方的block使用不做限制。

原因是Masonry通过语法糖,使用链式编程和block实现动态布局。这样会使代码段急剧增加。改成改成native直接布局后可以节约一半甚至更多的空间。舍弃便利换取空间。

b.定期检查删除不用的方法和类

目前已经有很多 工具 可以帮助我们检测不用的类和方法了,我列举一个如下:

https://github.com/ming1016/SMCheckProject
c.宏方法需要使用得当

我们都知道,宏方法会在使用它的地方完全展开。

我们项目中曾经有一个宏方法是在字典中查找一个值,这个字典以宏的形式存在,长期下来字典愈来愈大,而使用这个宏方法的地方越来越多,最终导致代码段猛增。修改方法很简单,直接把字典写在文件中写一个工具类管理,在启动后读到内存中就ok了。


以上所述就是小编给大家介绍的《iOS开发实践:控制代码段大小》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

爆品手记

爆品手记

金错刀 / 中国友谊出版公司 / 2016-9-20 / 39.80

互联网时代,一切都被颠覆。 B2B、B2C、O2O等商业模式的建立,对传统企业构成了巨大冲击。人们的生意往来逐渐从线下转移到了线上,传统的定位理论逐渐失效,依靠爆品引爆市场才是王道;传统企业经营多年的渠道营销模式正遭遇前所未有的阻力,网上商城正成为众多商家角逐血拼的主要战场。 在互联网的黑暗森林里,一切传统的商业模式统统失效,一场依靠爆品点燃市场、引爆市场、占据市场的营销革命正悄然兴起......一起来看看 《爆品手记》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具