ios - 有没有办法检查 Objective-c 提供的方法的时间复杂度?

标签 ios objective-c performance

实际上有时您需要编写一些自定义代码来实现某些功能,有两种可能的方法:

  1. 通过加入已经给出的方法来实现 Objective-c
  2. 编写您的自定义代码

那时我很困惑哪个代码库更好(在性能方面),只有当我幸运地找到 Objective-c 方法的时间复杂度时才能决定。那么有什么办法可以了解吗?

最佳答案

您可以在 iOS(和其他 Apple 平台)的 SDK 中调用很多方法和函数,因此这个问题可能过于宽泛。

但是时间复杂度的讨论通常是关于算法复杂性的,因此我们可以将我们的范围限制在那些作为算法构建 block 的调用上,我们在这些调用中将时间作为输入大小的函数来测量 - 即是,像集合操作之类的东西,而不是,比如说,UIApplication registerForRemoteNotifications .

然而,总的来说,Apple 并没有过多谈论 Cocoa 中高级数据结构的计算复杂性。这可能与 Cocoa 的设计目标有关,即强烈支持封装,用简单的接口(interface)隐藏强大的、动态的、可能适应性强的实现。检查 CoreFoundation——Cocoa 核心部分的开源实现,比如集合——证明了这一点。 Here's a great writeup关于如何NSArray有时是O(1),有时不是。

对于这样一种哲学,你不应该关心你所使用的工具的复杂性,肯定有一些话要说 - 告诉它你想做什么,而不是 你希望它如何完成,并让它为你优化性能,因为它可以比你更好地事后评估你自己。它与避免的哲学相得益彰premature optimization .

另一方面,拥有强制的、可预测的复杂性的基本构建 block 的哲学也有一定的意义,这样您就可以更轻松地规划根据它们构建的算法的复杂性。只是为了表明苹果似乎是双向的,这似乎是选择的哲学for the Swift standard library .

关于ios - 有没有办法检查 Objective-c 提供的方法的时间复杂度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34639748/

相关文章:

ios - Swift 中是否有#ifdef 来区分Xcode 6.4 和Xcode 7 beta?

c# - 使用 .net http2 的 Apple 推送通知

objective-c - xcode 无法隐藏 tabbarcontroller

objective-c - 将 NSArray 转换为 char** 并返回 c 数组

javascript - 将相同数组/对象元素分配给相同元素的性能

javascript - Safari ios(iphone 和 ipad)仅在单击 devtools 时才能正常工作

ios - iOS 7 中的图像解压缩

objective-c - UITableView didSelectRowAtIndexPath 方法未触发

javascript - 在 JavaScript 数组中查找唯一对象的最快方法

c# - clr 的原因! PerfView CPU 堆栈中的 JIT_New