其實有時你需要編寫一些自定義代碼來實現某些功能,會有有2點可能的方法:有沒有什麼方法檢查Objective-c提供的方法的時間複雜度?
- 讓你實現通過連接 的Objective-C已經給出的方法
- 編寫自定義代碼
在這一點上我很困惑該代碼是更好(性能),這隻能如果我很幸運發現的Objective-C的方法Time-Complexity
決定。那麼有什麼方法可以知道嗎?
其實有時你需要編寫一些自定義代碼來實現某些功能,會有有2點可能的方法:有沒有什麼方法檢查Objective-c提供的方法的時間複雜度?
在這一點上我很困惑該代碼是更好(性能),這隻能如果我很幸運發現的Objective-C的方法Time-Complexity
決定。那麼有什麼方法可以知道嗎?
還有很多的方法和功能,你可以調用的iOS SDK(和其他蘋果平臺),所以這個問題可能過於寬泛。
但時間複雜度的討論通常是約算法的複雜性,因此,我們可以限制我們的範圍,那些算法的基石,我們測量時間爲輸入大小的函數調用 - 也就是,像收集操作而不是比如說UIApplication registerForRemoteNotifications
。但是,大體上,蘋果公司並沒有提到可可的高級數據結構的計算複雜性。這可能與Cocoa的設計目標強烈支持封裝有關,簡單的接口隱藏了強大的,動態的和可能適用的實現。檢查CoreFoundation - Cocoa核心部分的開源實現,比如集合 - 支持這一點。 Here's a great writeup有關如何NSArray
有時是O(1)有時並非如此。
有肯定是對這裏你不應該在乎的你正在使用的工具的複雜性哲學可說的 - 告訴它你想要做什麼,不如何你想要它做,並讓它爲你優化性能,因爲它可以比猜測自己更能預測你的情況。它符合避免premature optimization的理念。
另一方面,對於具有強制的,可預測的複雜性的基本構建模塊的理念也有一定意義,以便您可以更輕鬆地規劃從它們構建的算法的複雜性。只是爲了表明蘋果似乎這樣做,看來這是選擇的理念for the Swift standard library。
編碼簡單,然後學習/使用[*這項技術*](http://stackoverflow.com/a/378024/23771)。這會告訴你你應該關注什麼。除非你有更多的親身經歷,否則你實在無法預測什麼是性能問題。 –
objc.io上的精彩人物爲自己的基金會收藏類型做了一些調查。這是一個很好的參考,雖然在發現性能問題之前,算法的複雜性應該不是真正的決定因素:https://www.objc.io/issues/7-foundation/collections/ –