10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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:311683
用户头像

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

关注

评论

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

Trending热榜关闭前,我把Github今年最火Java面试题汇总扒下来了

Geek_0c76c3

Java 数据库 开源 程序员 开发

什么是实时渲染,3D实时渲染的优缺点

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

华为应用市场审核指南解读课程上线,面向开发者讲解应用审核2022年更新要点

最新动态

借助iMazing工具重新安装或升级 iOS系统

淋雨

ios iphone

面试整理的45W字Java真题和答案详解(含核心考点及6家大厂真题)

Geek_0c76c3

Java 数据库 开源 程序员 开发

好的,BFS,学会了

掘金安东尼

前端 9月月更

Baklib+伙伴云+企微会话存档,打造伙伴云帮助中心运营体系

Baklib

软件测试 | 测试开发 | 提高Android云真机稳定性的方法

测吧(北京)科技有限公司

测试

一文读懂TDengine的三种查询功能

TDengine

数据库 tdengine 时序数据库 企业号九月金秋榜

全网首发!马士兵内部共享—1658页《Java面试突击核心讲》

Geek_0c76c3

Java 数据库 开源 程序员 开发

专访美象科技|中国数字孪生50强为何需要3DCAT实时渲染云的赋能?

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

盘点团队在线协作文档工具

Baklib

在线协作文档

当下企业数字化转型,PaaS是基础解

ToB行业头条

为了进大厂!吃透了各大厂最新 3000+Java 面试题啃完面试肯定妥了

Geek_0c76c3

Java 开源 程序员 架构 开发

联通研究院霍龙社博士深度解析“AI项目到底适不适合开源”

OpenI启智社区

人工智能 OpenI启智社区 AI开源 CubeAI智立方

全方位助力数据科学组织协同&个人研究:ModelWhale 产品功能介绍与版本选择指引

ModelWhale

云计算 科技 数据科学 编程建模 组织协同

一加是OPPO的子品牌?我来说说我的看法

Geek_8a195c

开发者有话说|刚毕业的“00后”,歪打误撞进入了SAP行业

暮春零贰

个人成长 9月月更

企业IT运维开发一体化解决方案

力软低代码开发平台

OptaPlanner快速入门-概述

积木编程

Java岗史上最全八股文面试真题汇总,堪称2022年面试天花板

Geek_0c76c3

Java 数据库 开源 程序员 开发

如何使用游戏引擎进行实时渲染和内容创建

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

帮助中心案例分析|师爷,给我解释解释什么叫降本增效?

Baklib

降本增效 帮助中心

Vue3入门指北(五)条件渲染

Augus

Vue 3 9月月更

哪7个场景影响研发效能?

LigaAI

敏捷 LigaAI 企业号九月金秋榜 #敏捷开发 #程序

从新零售、物流到广告,搞定指标中台就这么简单!

Kyligence

数据分析 指标管理 指标中台

产品经理必看的高效产品文档撰写指南

Baklib

产品 产品经理 文档

ESP32-C3 学习测试 蓝牙 篇(二、蓝牙调试APP、开发板手机连接初体验)

矜辰所致

ESP32-C3 9月月更 蓝牙APP

ESP32-C3 学习测试 蓝牙 篇(三、认识蓝牙 GATT 协议)

矜辰所致

蓝牙 ESP32-C3 9月月更 GATT

Apache APISIX 集成 Elasticsearch 实现实时日志监控

API7.ai 技术团队

elasticsearch API网关 APISIX 网关

为什么3D实时渲染很重要

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

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