首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Xcode5和iOS 7:架构和有效架构

Xcode5和iOS 7:架构和有效架构
EN

Stack Overflow用户
提问于 2013-09-20 17:57:48
回答 1查看 128.9K关注 0票数 82

我在Xcode5中开始了一个新项目。我想使用iOS SDK 7开发应用程序,但要以部署目标iOS 5.0为目标。当我在Xcode中创建新项目并尝试将部署目标更改为5.0时,我收到了以下消息:

代码语言:javascript
复制
Applications including an arm64 slice are not compatible with versions of iOS
prior to 6.0
Adjust your Architectures build setting to not include arm64 in order to deploy
to releases prior to iOS 6.0.

因此将架构更改为Standard (不是64位)。我编译,运行,但我不是真的理解刚刚发生的事情。

Xcode项目构建设置中的ArchitecturesValid architectures设置有什么不同?

如果我将Architectures设置为排除64位,当我在64位iPhone或iOS模拟器上运行我的应用程序时会发生什么(我知道它是有效的,我只是好奇它下面是什么)?

你能解释一下新的64位架构带来的巨大混乱吗?

EN

回答 1

Stack Overflow用户

发布于 2013-09-21 21:42:06

当您设置为64位时,得到的二进制文件是一个" fat“二进制文件,它包含捆绑了一个瘦fat头部的所有三个Mach-O图像。您可以使用otool或jtool看到这一点。您可以查看包含在iOS 7.0SDK中的一些fat二进制文件,例如AVFoundation框架,如下所示:

代码语言:javascript
复制
% cd  /Developer/Platforms/iPhoneOS.platform/DeviceSupport/7.0\ \(11A465\)/Symbols/System/Library/Frameworks/AVFoundation.framework/

%otool -V -f AVFoundation                                                                     9:36
Fat headers
fat_magic FAT_MAGIC
nfat_arch 3
architecture arm64     # The 64-bit version (A7)
    cputype CPU_TYPE_ARM64
    cpusubtype CPU_SUBTYPE_ARM64_ALL
    capabilities 0x0
    offset 16384
    size 2329888
    align 2^14 (16384)
architecture armv7        # A5X - packaged after the arm64version
    cputype CPU_TYPE_ARM
    cpusubtype CPU_SUBTYPE_ARM_V7
    capabilities 0x0
    offset 2359296
    size 2046336
    align 2^14 (16384)
architecture armv7s       # A6 - packaged after the armv7 version
    cputype CPU_TYPE_ARM
    cpusubtype CPU_SUBTYPE_ARM_V7S
    capabilities 0x0
    offset 4407296
    size 2046176
    align 2^14 (16384)

至于二进制文件本身,它使用ARM64位指令集,这是(主要与32位兼容,但)完全不同的指令集。这对于图形程序(使用霓虹灯指令和寄存器)尤其重要。同样,CPU有更多的寄存器,这对程序速度有相当大的影响。在http://blogs.barrons.com/techtraderdaily/2013/09/19/apple-the-64-bit-question/?mod=yahoobarrons中有一个关于这是否有影响的有趣讨论;到目前为止,基准测试已经清楚地表明是有影响的。

使用otool -tV将转储程序集(如果您使用的是XCode 5或更高版本),然后您可以自己查看指令集差异。大多数(但不是所有)开发人员将对这些更改保持不可知,因为大多数情况下,它们不会直接影响Obj-C (尽管有CG*API),并且必须在低级指针处理方面做更多工作。编译器将发挥它的魔力和优化功能。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18913906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档