2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

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

关注

评论

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

灵魂拷问,你真的了解DNS吗?

蔡农曰

互联网 前端 后端 计算机网络

网络编程与通信原理

Java 架构

分布式锁主动续期的入门级实现-自省 | 简约而不简单

小小怪下士

Java 程序员 分布式 分布式锁

工赋开发者社区 | 架构瓶颈原则:用注意力probe估计神经网络组件提供多少句法信息

工赋开发者社区

啃透这500页高并发笔记薪资涨了20K,并连收天猫,京东等5个Offer

钟奕礼

Java 程序员 java面试 java 编程

react源码中的fiber架构

flyzz177

React

用javascript分类刷leetcode3.动态规划(图文视频讲解)

js2030code

JavaScript LeetCode

浅谈如何在小红书和知乎两大平台做好引流推广

石头IT视角

云与开源,共植数字世界的根

Apache Flink

大数据 flink 实时计算

流处理基础概念-窗口与时间

穿过生命散发芬芳

流处理 12月月更

运维进阶训练营 -W07H

b1a2e1u1u

运维

极客时间运维进阶训练营第七周作业

老曹

开始用ChatGPT写作

SkyFire

ChatGPT

架构实战 - 模块 2 作业

mm

微信朋友圈 #架构实战营

从德鲁克管理实践看服务化架构

agnostic

微服务

React源码分析8-状态更新的优先级机制

flyzz177

React

React源码分析7-state计算流程和优先级

flyzz177

React

从React源码分析看useEffect

flyzz177

React

react源码中的hooks

flyzz177

React

【圣诞节】会呼吸的玫瑰爱心代码 -李峋爱心续 动画演示思路 代码开源

非喵鱼

Java Python 程序员 前端 爱心代码

架构训练营作业-模块2

张建闯

架构实战营

学习编程必须知道的三个网站

邱比特讲编程

GitHub 编程 Google Stack Overflow 编程工具

Verilog 的连续赋值

芯动大师

Verilog Verilog语法 连续赋值

设计模式之美——单一职责(Single Responsibility Principle)

GalaxyCreater

设计模式

react源码中的协调与调度

flyzz177

React

微信朋友圈高性能复杂度

闲人Eric

架构实战营

HarmonyOS玩转ArkUI动效 - 水母动画

Halifax

前端 动画 HarmonyOS OpenHarmony arkui

2022-12-11:行程和用户。以下为输出结果,请问sql语句如何写? +------------+-------------------+ | Day | Cancellation

福大大架构师每日一题

数据库 福大大

记一次Mysql大数据分页优化问题

石臻臻的杂货铺

MySQL 数据库

架构实战营模块二作业

张Dave

前端工程师leetcode算法面试必备-二叉树深度广度遍历

js2030code

JavaScript LeetCode

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