Ios 在斯威夫特与可可表演

Ios 在斯威夫特与可可表演,ios,objective-c,cocoa,swift,Ios,Objective C,Cocoa,Swift,既然可可库(基金会、UIKit、CoreData等)是用Objective-C编写的,没有转换成Swift(还没有),那么我们在Swift中调用这些可可库与在Objective-C中使用可可库(到目前为止一直是这样)相比,还能获得Swift提供的性能优势吗 系统框架就是系统框架。无论从哪种语言调用,它们都将执行相同的操作 苹果在其框架中有数百万行代码。(可能数亿行)我怀疑他们是否会将所有这些框架大规模转换为Swift。相反,当他们更新和扩展他们的框架时,他们可能会在合适的地方使用Swift而不是

既然可可库(基金会、UIKit、CoreData等)是用Objective-C编写的,没有转换成Swift(还没有),那么我们在Swift中调用这些可可库与在Objective-C中使用可可库(到目前为止一直是这样)相比,还能获得Swift提供的性能优势吗

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

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

当你看一个应用程序的性能时,它通常归结为一小部分代码,这是一个瓶颈,占用了大量的时间。优化程序的其他部分效果甚微

如果您的程序最终将大部分时间花在应用程序框架上,那么它是用Objective C、Swift、native assembler还是Java编写的并不重要

就我个人而言,我非常怀疑苹果声称Swift能带来巨大的性能优势。我怀疑他们的比较故意挑出了在使用“纯”Objective-C编写时具有非常糟糕性能特征的问题(忽略了Objective-C是C的真正超集这一事实,并且您总是可以在Objective-C程序中编写C代码。)

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

另一点是,通常你的算法比你的实现有更大的不同。如果你在一百万条记录上使用冒泡排序,那么即使你编写了最巧妙、最高度优化的冒泡排序实现,它也会慢很多

例子:
我们公司在Mac应用商店里有一个Mac程序(link)。这是一个非常高性能的分形渲染器。在内部,它分配一块内存来存储结果,然后使用精心编制的C代码进行数字运算。它是多线程的,在计算完成之前,它会让Mac电脑上的每个内核都保持“最大化”。在可能的情况下,它还利用Mandelbrot和Julia集的几何知识来使用“边界跟踪”算法,并跟踪具有相同“迭代值”的区域外部,然后洪水填充整个区域,从而通常可以节省数百万甚至数十亿昂贵的浮点计算。第一部分,使用内存缓冲区和C代码计算结果,是实现优化。第二位,边界跟踪算法,是一种算法优化,对于适合的问题,它可以将计算次数减少5倍甚至10倍。

有一天,我希望我能写出一个值得Duncan回答的问题。他总是给出最好的细节和有趣的观点。非常感谢你的快速和详细的回复,邓肯。我很感激!