首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Cocoa在Swift中的表现

Cocoa在Swift中的表现
EN

Stack Overflow用户
提问于 2014-06-04 19:25:29
回答 1查看 537关注 0票数 2

自从可可脂(基金会,UIKit,CoreData等)是用Objective写的,没有转换成Swift (还没有?)我们还能得到Swift提供的性能好处吗?在Swift中调用这些可可脂与使用目标C(到目前为止一直是这样)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-04 19:48:31

呃..。

系统框架就是系统框架。无论从哪种语言调用它们,它们都将执行相同的操作。

苹果的框架中有数以百万代码行。(可能有数亿行。)我怀疑他们是否会大规模地将所有这些框架转换成Swift。相反,当他们更新和扩展他们的框架时,他们可能会在合适的地方使用Swift而不是目标C,然后为这两种语言提供接口。苹果代码的转换可能仅限于新的API和/或API,在这些API中,由于其他原因,它们正在进行重大改革。

当您查看应用程序的性能时,它通常归结为一小部分代码,这是瓶颈,占用了大量时间。优化程序的其他部分没有什么效果。

如果您的程序在应用程序框架上花费了大部分时间,那么它是否用目标C、Swift、本机汇编程序或Java编写并不重要。

就我个人而言,我非常怀疑苹果声称斯威夫特带来了巨大的性能效益。我怀疑,当用“纯”Objective编写时,它们的比较故意选择了性能非常差的问题(忽略了Objective是一个真正的C超集,而且您可以始终在Objective程序中编写C代码)。

我是一个老的汇编程序骑师,在那之后我是一个C程序员。在进行应用程序设计时,我避免创建表示微小数据原子的对象,尽量减少紧循环中的内存分配,有时甚至会使用C函数而不是objects方法调用编写关键代码。我已经优化了我的设计和实现,意识到是什么减慢了程序。我敢打赌,使用这种方法,Swift和Objective代码之间的区别很小。如果我们在Swift中对什么是对象和什么是一个简单的标量值数组拥有较少的控件,我希望仔细的编码仍然会使C和object混合得到更好的性能。

另一点是,通常您的算法比您的实现要重要得多。如果你在一百万个记录上使用一个气泡排序,即使你写了一个最光滑,最优化的气泡排序的实现,它也会很慢。

示例:

我们公司在Mac中有一个Mac程序,FractalWorks (链接)。它是一个非常高性能的分形渲染器。在内部,它分配一个内存块来存储结果,然后使用精心编制的C代码进行数字处理。它是多线程的,并保持每一个核心在你的Mac“最大限度”,直到计算完成。在可能的情况下,它还使用Mandelbrot和Julia集的几何知识来使用“边界跟踪”算法,并跟踪具有相同“迭代值”的区域的外部,然后淹没整个区域,从而经常节省数百万甚至数十亿昂贵的浮点计算。第一部分,使用内存缓冲区和C代码计算结果,实现优化。第二位,边界跟踪算法,是一种算法优化,对于适合的问题,它可以将计算次数减少5倍甚至10倍。

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

https://stackoverflow.com/questions/24045888

复制
相关文章

相似问题

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