写点什么

Xamarin 到 64 位 iOS/OSX 平台的粗野过渡

  • 2013-11-18
  • 本文字数:911 字

    阅读完需:约 3 分钟

当 Xamarin 开始自己的 iOS 项目的时候,设备仅能够在 32 位模式下使用,也就是 32 位版本的 NSInteger 和 CGFloat。当他们开始调查 64 位 OSX 的时候,他们意识到自己对那些数据类型的假设是错误的。 Miguel 继续说

我们将需要审计我们的所有 API 从而实现合适的类型映射,同时我们将破坏源码的兼容性,使用类似于下面的代码:

复制代码
var foo = new Xxx ();
int count = foo.GetRowCount ();
// oops, can not cast a long into an int.

当我们把源码的破坏和 Apple 拥有一个 32 位兼容性故事,同时我们仅有一些遗留类库依赖于 32 位 API 的事实结合起来的时候,我们意识到我们并不急于转移到 64 位的世界。

随着仅能引入 64 位类库的 Mountain Lion 的出现,他们看到了改变这种设计的需要。而 Apple 提供 32 位和 64 位版本的 iPhone 5 的决定进一步加剧了这种局面。为了处理这些新的挑战,Xamarin 已经创建了三个新的数据类型:

  • nint
  • nuint
  • nfloat

这些新的结构被定义为 32 位或者 64 位,依赖于代码编译的目标平台。但是故事的内容远不止如此。原始的数学运算使用特殊的 IL 指令进行操作(例如加法),而用户定义的结构需要调用 op_Addition 方法。

对于性能敏感的代码而言这可能会引发一些小的但是值得注意的影响。因为在使用本地类库的时候这些类型是非常基础的,AOT 编译器会被修改为重新解释使用这些类型的操作。Miguel 继续说:

op_Addition 调用最终会和本地 ECMA CIL add 指令一样。IL 可能看起来很恐怖,但是本地代码也是如此。

一些人可能会想知道为什么 Xamarin 不使用 IntPtr——支持平台特定整数的 CLR 数据类型。Miguel 写道:

我们选择了 nint 和 nuint 而不是内置的 IntPtr 和 UIntPtr,因为前者让人感觉是自然的“原生整型”,而 IntPtr 则是文化相关的,它已经有指针或者一个本地符号。另外,我们并没有等价的本地浮点类型。

我们选择避免使用名称 NSInteger 和 CGFloat 有几个方面的原因:一般情况下功能已经足够,它们可能值得在 Mono 中用于除了 Mac 和 iOS 之外的地方;同时感觉这些是真正的 VM 支持的类型,而不是一些类型定义或者别名。在理想的情况下,这些最终会成为 C#标准的一部分。

查看英文原文 Xamarin’s Rough Transition to 64-bit iOS/OSX

2013-11-18 05:311427
用户头像

发布了 321 篇内容, 共 122.0 次阅读, 收获喜欢 19 次。

关注

评论

发布
暂无评论
发现更多内容

施工管理难?试试这8款建筑企业项目管理系统

易成研发中心

企业管理 企业管理系统 企业管理工具

如何使用 DataX 连接 Easysearch

极限实验室

easysearch

9大工程项目管理平台对比测评,帮你选择最佳工具

爱吃小舅的鱼

项目管理 工程项目 工程项目管理

海尔小海豚洗地机G700 怎么样

妙龙

洗地机 海尔

创维电视75A6E参数配置详情

妙龙

智能电视 创维电视

Exynos2400属于什么档次 Exynos 2400性能怎么样

妙龙

cpu 三星

量化合约开发技术,打造高收益合约交易系统

V\TG【ch3nguang】

格力2匹天仪空调 怎么样

妙龙

智能空调 格力空调 家用空调

10款实现需求闭环管理的软件,助力项目全流程管理

爱吃小舅的鱼

安卓逆向实战:极简APP

LLLibra146

Android 逆向

0G 中国行活动来袭!见证 AI 与区块链的深度融合

TinTinLand

小天才儿童电话手表Z10 怎么样

妙龙

小天才 儿童电话手表 小天才电话手表

工程项目综合管理系统推荐:8大主流工具全对比

爱吃小舅的鱼

项目管理 工程项目 工程项目管理 工程项目综合管理

JAM Tour 2025 中国站报名火热进行中!与 Gavin Wood 面对面交流!

One Block Community

web3 JAM

ROG枪神8 Plus 参数配置

妙龙

笔记本电脑 rog

格力大1匹云锦三代空调 怎么样

妙龙

智能空调 格力空调

Exynos 2400 和骁龙8 Gen 3选哪个好

妙龙

cpu 骁龙处理器

淘宝商品销量详情 API 接口的开发、应用与收益

科普小能手

数据挖掘 数据分析 淘宝 API 接口 跨境电商运营

管理需求平台推荐:10大厂商的详细功能对比

爱吃小舅的鱼

项目管理 需求管理 需求管理软件 需求管理平台

MOVE to Mansion 香港站|探寻 Movement 技术创新与发展机遇

TinTinLand

TCL电视 98T8H 怎么样

妙龙

智能电视 TCL tcl电视

添可芙万T5无线洗地机 怎么样

妙龙

洗地机 添可芙万

行业热点丨消费电子产品如何在激烈的竞争中建立研发优势?Jabra的高阶仿真应用或许是一个学习样板

Altair RapidMiner

数据分析 CAE 仿真技术 Hypermesh Simlab

Messari Polkadot 2024 Q4 生态报告|核心数据强劲增长,生态发展持续提速

One Block Community

Sui Hacker House 深圳与你共拓 Web3 项目开发新疆域

TinTinLand

web3 Sui

石头扫地机器人P10S Pro 怎么样

妙龙

扫地机器人 石头扫地机器人

小红书笔记详情 API 接口的开发、应用与收益

科普小能手

数据挖掘 数据分析 电商 小红书 API 接口

开发一个NFT交易平台的成本大概是多少?

V\TG【ch3nguang】

NFT开发

9款主流需求管理全流程系统推荐,提升项目管理效率

爱吃小舅的鱼

项目管理 需求管理 需求管理软件 需求管理平台

海信电视85D3KD 参数配置

妙龙

智能电视 海信电视

当贝X5SPro投影仪 参数

妙龙

投影仪 当贝投影仪 家用投影仪 当贝

Xamarin到64位iOS/OSX平台的粗野过渡_语言 & 开发_Jonathan Allen_InfoQ精选文章