7c9*_*fdf 2 cocoa objective-c ios swift
由于可可库(Foundation,UIKit,CoreData等)是用Objective-C编写的,而不是转换为Swift(还是?),我们仍然可以获得Swift提供的性能优势,当在Swift中调用这些可可库时使用libaries以及Objective-C(直到现在一直如此)?
Dun*_*n C 10
呃...
系统框架是系统框架.无论调用哪种语言,它们都会执行相同的操作.
Apple 在其框架中拥有数百万行代码.(可能有数亿行.)我怀疑他们是否会将所有这些框架大规模转换为Swift.相反,当他们更新和扩展他们的框架时,他们可能会在适当的地方使用Swift而不是Objective C,然后为这两种语言提供接口.Apple代码的转换可能仅限于新API和/或API,因为其他原因正在对其进行重大改革.
当您查看应用程序的性能时,通常会归结为少量代码,这是瓶颈并占用大部分时间.优化程序的其他部分影响很小.
如果你的程序花费大部分时间在应用程序框架中,那么它是用Objective C,Swift,本地汇编程序还是Java编写的并不重要.
就个人而言,我对Apple声称Swift的巨大性能优势表示怀疑.我怀疑他们的比较是故意选择在用"纯"Objective-C编写时具有非常差的性能特征的问题(忽略了Objective-C是C的真正超集的事实,并且你总是可以在Objective-C中编写C代码程序.)
我是一名旧的汇编骑师,之后是C程序员.当我进行应用程序设计时,我避免创建表示微小数据原子的对象,最小化紧密循环中的内存分配,甚至有时使用C函数而不是Objective-C方法调用来编写关键代码.我已经通过了解减慢程序的速度来优化我的设计和实现.我敢打赌,通过这种方法,Swift和Objective-C代码之间的差异很小.如果我们在Swift中对什么是对象的控制较少以及什么是标量值的简单数组,我希望通过C和Objective-C的混合,仔细编码仍然会产生更好的性能.
另一点是,通常你的算法比你的实现更有区别.如果你对一百万条记录使用冒泡排序,即使你编写了一个最优化,最优化的冒泡排序实现,它也会变得很慢.
我们公司在Mac App商店中有一个Mac程序FractalWorks(链接).它是一种性能非常高的分形渲染器.在内部,它分配一块内存来存储结果,然后使用精心设计的C代码进行数字运算.它是多线程的,并且在计算完成之前将Mac上的每个核心"保持最大化".在可能的情况下,它还使用Mandelbrot和Julia集的几何知识来使用"边界跟随"算法,并跟踪具有相同"迭代值"的区域的外部,然后泛洪填充整个区域,因此经常节省数百万甚至数十亿的昂贵的浮点计算.第一部分,使用内存缓冲区和C代码来计算结果,是实现优化.第二位,边界跟随算法,是一种算法优化,对于适合的问题,它可以将计算次数减少5倍甚至10倍.
| 归档时间: |
|
| 查看次数: |
524 次 |
| 最近记录: |