iOS开发之静态库(六)—— 时空之争
前面的所有试验中,我们的静态库都支持了所有可能的指令集(i386, x86_64, armv7, armv7s, arm64),最大限
度的匹配了所有可能运行该代码的设备,使代码在当前存在的几乎所有iOS设备上都能以最优的性能运行。然而,这样
做是否真的很好,是否真的必要。
我们来做个试验:参考“Apple移动设备处理器指令集 armv6、armv7、armv7s及arm64”生成各种包含特定指令集
的静态库,查看其占用磁盘空间的大小,结果如下
从上图可以很清楚的看到,生成的二进制文件所支持的指令集越多,其占用的磁盘空间也越大:
支持1种指令集的静态库的大小在53K左右
支持2种指令集的静态库的大小在106K左右
支持3种指令集的静态库的大小在159K左右
支持4种指令集的静态库的大小在212K左右
支持5种指令集的静态库的大小在265K左右
结论:基本上与所支持的指令集的数量成正比
程序的时间与空间之争历来都是存在的,有些程序注重代码执行的效率,也有些程序注重自身代码的大小,尤其是
移动设备上的应用基本上都是靠无线网络(甚至是3G网络)下载安装的,而且iOS应用只能使用静态库,这个限制无疑
又大大增加了程序本身的大小,App Store中一个应用安装包在几十、几百M甚至几个G都是很常见的,所以App瘦身在
iOS应用中的需求也是很多的。
从“Apple移动设备处理器指令集 armv6、armv7、armv7s及arm64”可知,所有指令集都是向下兼容的。到了2014
年,iPhone3G等标配armv6指令集的设备基本已经绝迹了,而且从XCode4.5开始,也都取消了对armv6指令集的支持,所
以当前只需要考虑armv7及以上的指令集即可。
我们可以通过减少支持的指令集数目来减小App的大小(效果还相当好),如果我们的App只支持armv7指令集,在
标配arm64指令集的iPhone5S上是可以正常运行的,只是损失了点点性能,当然在其他的设备上也能够正常运行,从而
达到App瘦身的需求。
事实上,目前AppStore上的一些知名应用也都是这么做的,比如百度地图、腾讯地图通过反汇编工具查看后,也都
只支持armv7指令集。
因此,对于那些性能上没有太高要求的App,尽可能减少其支持的指令集(如只支持armv7指令集),减小其自身大
小,从而在一定程度上增加其下载率。
iOS开发之静态库(六)—— 时空之争的更多相关文章
- iOS开发中静态库之".framework静态库"的制作及使用篇
iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...
- iOS开发中静态库制作 之.a静态库制作及使用篇
iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...
- iOS开发之静态库(五)—— 图片、界面xib等资源文件封装到静态框架framework
编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一.首先将资源文件打包成bundle 由于bundle是静态的,所以可以将 ...
- 李洪强iOS开发之静态库的打包一
李洪强iOS开发之静态库的打包一 //静态库一般做一下几种事情 //1 工具类 算法逻辑 新建工具类LHQTools 定义类方法 + (NSInteger)sumWithNum1: (NSIntege ...
- 【转】 iOS 开发之静态库.a和动态库详解 -- 不错
原文网址:http://blog.csdn.net/lxl_815520/article/details/52154331 一, 简单介绍 1.什么是库 库是程序代码的集合,是共享程序代码的一种方式 ...
- iOS开发之静态库(四)—— 静态框架framework制作
前面介绍过,虽然苹果公司禁止在iOS开发中使用动态库,而且也从XCode中移除了创建静态框架的功能,但我们还是可以通过对XCode进行小小的改动来创建静态框架. 编译环境:Macbook Air + ...
- iOS开发之静态库(一)—— 基本概念
在项目开发过程中,经常出现优秀代码重用现象,又或者提供给第三方功能模块却又不想让其看到源代码,这些时候,通常的做法是将代码封装成库或者框架,这些在Windows编程或Linux编程中非常容易实现的过程 ...
- 李洪强iOS开发之静态库
iOS开发拓展篇—静态库 一.简单介绍 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的分类 根据源代码的公开情况,库可以分为2种类型 (1)开源库 公开源代码,能看到具体实现 ...
- 【iOS开发之静态库、动态库】
什么是库? 库 就是程序代码的集合, 是共享程序代码的一种方式,库一般分两类:开源库和闭源库.github中共享一般是开源库:闭源库分为:静态库和动态库,闭源库不开放源代码,是经过编译的二进制文件,一 ...
随机推荐
- [转] MovieClip转Bitmap方法
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; ...
- js获取当前页面信息
设置或获取对象指定的文件名或路径.<script>alert(window.location.pathname)</script> 设置或获取整个 URL 为字符串.<s ...
- MySQL的binlog数据如何查看
binlog介绍 binlog,即二进制日志,它记录了数据库上的所有改变. 改变数据库的SQL语句执行结束时,将在binlog的末尾写入一条记录,同时通知语句解析器,语句执行完毕. binlog格式 ...
- 参数(parameter)和属性(Attribute)的区别
参数(parameter)和属性(Attribute)的区别 区别: 来源不同: 参数(parameter)是从客户端(浏览器)中由用户提供的,若是GET方法是从URL中 提供的,若是POST方法是从 ...
- [vb.net]XML File Parsing in VB.NET
Introduction Parsing XML files has always been time consuming and sometimes tricky. .NET framework p ...
- Keepalived安装配置
一. 介绍 keepalived:是一个类似于 layer3, 4 & 7 交换机制的软件,也就是我们平时说的第 3 层.第 4 层和第 7层交换. Keepalived 的作用是检测 we ...
- C语言和Lua的交互
//test.c #include <stdio.h> #include "lua.h" #include "lualib.h" #include ...
- Matlab神经网络函数newff()新旧用法差异
摘要 在Matlab R2010a版中,如果要创建一个具有两个隐含层.且神经元数分别为5.3的前向BP网络,使用旧的语法可以这样写: net1 = newff(minmax(P), [5 3 1]); ...
- Linux下运行jar包
方法① 1.vim xxx.jar 2.配置程序入口:找到MANIFEST.MF,添加Main-Class:+空格+package.class 3.引入第三方jar包:①在MANIFEST.MF中加入 ...
- Python成长笔记 - 基础篇 (一)python简介
一.Python介绍 Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/),由吉多·范罗苏姆(Guido van Rossum)于1989年发明,第一个公开发行版发行于1991 ...