iOS Architectures 浅谈
iOS项目打包,或者只是在项目里面调用第三方静态库抑或是自己新建一个静态库,就要无可避免的和Architectures打交道。Architectures在Targets面板的Build Settings下,如下图红框所示:

首先请注意上图蓝色框部分,选项里面出现了好几个ARM,ARM指的就是ARM处理器,它被普遍使用在嵌入式设备中,例如手机、平板等。不同的设备对应的处理器架构版本不同,设备只会执行对应处理器版本的指令集。举个栗子,iPhone5的处理器版本是armv7s,如果你最终只编译了arm64版本,项目是不可能跑在iPhone5上面的,再或者你调用了一个只支持arm64的第三方静态库,而你的项目需要支持armv7和armv7s,这个时候你导入这个第三方库编译就会报错。但是有一点需要注意的就是向下兼容原则,即你的项目只编译了armv7s,支持arm64的设备是能够正常运行的,只是这个时候就无法完全发挥手机的性能。稍微统计了下目前iOS设备对应的ARM处理器:

Architectures 和 Valid Architectures
/* Architectures: Space-separated list of identifiers. Specifies the architectures (ABIs, processor models) to which the binary is targeted. When this build setting specifies more than one architecture, the generated binary may contain object code for each of the specified architectures. Valid Architectures: Space-separated list of identifiers. Specifies the architectures for which the binary may be built. During the build, this list is intersected with the value of ARCHS build setting; the resulting list specifies the architectures the binary can run on. If the resulting architecture list is empty, the target generates no binary */
大部分人都会被Architectures和Valid Architectures搞混淆。Valid Architectures表示的是你的项目所支持的处理器架构列表,是一个大的集合,而Architectures表示的是你的项目编译的时候最终生成的二进制文件包含的处理器架构集合。当然如果你的Architectures超出了Valid Architectures的范围,只能取Architectures和Valid Architectures的交集。一般来说,不需要修改Valid Architectures,你只要设置Architectures成你需要的架构版本就可以了。如果你理解了这两个概念,再回过头来看看苹果对Architectures和Valid Architectures的默认设置,Valid Architectures设置成:arm64、armv7、armv7s,但是Architectures只设置成:armv7、arm64。这就是说,项目虽然支持市面上大部分手机的处理器架构版本,但是最终只比编译了两个版本。这也可以理解,根据向下兼容原则,目前市面上大部分32位iOS设备都支持armv7,而64位设备都支持arm64, 对样做即保证了高性能手机的运行性能不受影响,同时减小了生成包的大小,一举两得。
Build Active Architecture Only
/*
Boolean value. Specifies whether the product includes only object code for the native architecture.
*/
这个属性主要用在Debug的时候。根据字面意思,就是说只编译你当前连接设备(活跃状态)的处理器版本。这个属性不需要修改,Xcode的默认设置就是Debug为Yes,Release 为No。Debug模式设置为Yes,编译的时候只编译成当前连接设备的处理器版本,会大大缩短编译时间。Release的时候,需要设置成No,你要适配市面上大部分手机,如果Release你还设置成Yes,就要呵呵了,你生成的安装包只能安装在你当前连接设备的编译类型的手机上。当然,这也是你Release编译所花的时间要大大超过Debug的原因。
因为水平有限,说的比较乱,希望你们能够理解,如果还有不懂的地方,或者内容有误,欢迎在留言区指正。
转载请注明出处:http://www.cnblogs.com/tbfirstone/p/5869528.html
iOS Architectures 浅谈的更多相关文章
- IOS中 浅谈iOS中MVVM的架构设计与团队协作
今天写这篇文章是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇文章的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...
- iOS开发--浅谈CocoaAsyncSocket编程
Socket就是一种特殊的文件.它是一个连接了两个用户的文件,任何一个用户向Socket里写数据,另一个用户都能看得到,不管这两个用户分布在世界上相距多么遥远的角落,感觉就像坐在一起传纸条一样. 这么 ...
- [转]iOS之浅谈纯代码控制UIViewController视图控制器跳转界面的几种方法
参考:http://www.mamicode.com/info-detail-469709.html 一.最普通的视图控制器UIViewContoller 一个普通的视图控制器一般只有模态跳转的功能( ...
- iOS开发——浅谈构架与用户体验
工作不是千篇一律的重复,从中寻找乐趣才是我们应该做的. 作为一名码农,做过几个项目,每次做项目的时候都会自己构思,如果完全是我自己设计,会怎么去设计?心里一直没有满意的答案,不管怎么布局,好像都感觉差 ...
- iOS之浅谈纯代码控制UIViewController视图控制器跳转界面的几种方法
.最普通的视图控制器UIViewContoller 一个普通的视图控制器一般只有模态跳转的功能(ipad我不了解除外,这里只说iPhone),这个方法是所有视图控制器对象都可以用的,而实现这种功能,有 ...
- iOS学习——浅谈RunLoop
RunLoop的字面意思是运行循环.跑圈,一个App启动后能一直执行,就是因为启动后进入了一个循环,在这个循环中不断监听各种状态.手势动作,并做出相应的响应.这个循环就是我们今天要探究的RunLoop ...
- 【转】从Mac/OS和iOS开放源码浅谈UNIX家谱
阅读数:1245 苹果公司在各类开源项目中长期贡献着自己的力量,但其UNIX系统技术一直都属于闭源阵营(这一点可以从NUX OS阵营和家谱图中得到答案).然而,以封闭闻名的苹果公司,2017年国庆期间 ...
- iOS开发之浅谈MVVM的架构设计与团队协作
今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...
- 浅谈iOS视频开发
浅谈iOS视频开发 这段时间对视频开发进行了一些了解,在这里和大家分享一下我自己觉得学习步骤和资料,希望对那些对视频感兴趣的朋友有些帮助. 一.iOS系统自带播放器 要了解iOS视频开发,首先我们从 ...
随机推荐
- 系统级性能分析工具perf的介绍与使用
测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...
- Lintcode答案&笔记
1.A+B问题 给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符 思路:作异或得到未进位和,作与并向左移1位得到进位,随后再重复操作俩结果,直到进位为0,适合用递归 public in ...
- oracle数据查询
select * from XMBL_EM_DBBACK where f_djbh='DB01201612270013'select * from flow_task_list where biz_d ...
- 关于js中this关键字的补充
前面: 前面虽然综合了网络上不少大牛的心得,但感觉还是意犹未尽,为了彻底搞清楚js中this的相关知识,决定再写一篇.个人觉得,在技术上,除非钻到细枝末节,否则很难达至非常高的水平. 补充1: 无法重 ...
- 架构师养成记--10.master-worker模式
master-worker模式是一种并行计算模式,分为master进程和worker进程两个部分,master是担任总管角色,worker才是执行具体任务的地方. 总体流程应该是这样的: 具体一点,代 ...
- [信安presentation]Fight against GFW
Section1:加密 加密算法分为:对称加密算法.非对称加密算法.Hash 1.1对称加密算法 加密解密使用相同的密钥 eg:DES,AES,RC4,RC5,Triple DES 缺点:1.因为加密 ...
- js中网页区域/正文/屏幕 宽和高
网页可见区域宽: document.body.clientWidth; 网页可见区域高: document.body.clientHeight; 网页可见区域宽: document.body.offs ...
- Mysql 常用 SQL 语句集锦
Mysql 常用 SQL 语句集锦 基础篇 //查询时间,友好提示 $sql = "select date_format(create_time, '%Y-%m-%d') as day fr ...
- 差分进化算法 DE-Differential Evolution
差分进化算法 (Differential Evolution) Differential Evolution(DE)是由Storn等人于1995年提出的,和其它演化算法一样,DE是一种模拟生物进化 ...
- 《JavaScript高级程序设计(第3版)》笔记-序
很少看书,不喜欢看书,主要是上学时总坐不住,没有多大定性,一本书可以两天看完,随便翻翻,也可以丢在角落里几个月不去动一下. 上次碰到了<JavaScript高级程序设计(第3版)>感觉真的 ...