私は自分のアプリでSwiftとObjective-Cを選択しようとしています。現在、アプリで頻繁に発生する操作のパフォーマンスをテストしています。
jsonファイルをダウンロードし、次のようなNSDictionaryに入れるtestappを作成しました。
var err: NSError
var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(JSONData, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
println(jsonResult)
そして、私がそれをテストするとき、Objective-Cは毎回より速いようです。しかし、最適化(-Ounchecked)と最適化(-Onone)を使用しても違いはありません。 println
Objective-CとSwiftの両方で最大の減速です。
最適化の欠如は、そのラインを最適化することがほとんど不可能であるという事実と関係がありますか?
回答:
回答№1の場合は3あなたが言うように、上記のプログラムには最適化するものは何もありません。アセンブリの出力を見ることで自分自身をチェックすることができますが、私はそれらがほとんど同一であることを期待しています。
一般に、Cocoaに大きく関係するのはObjCでは、Swiftと同じかそれより速くなります。 ObjCコンパイラーには数十年にわたる作業があり、Cocoaには数十年にわたるObjC固有の最適化があります。既存のCocoaメソッドへの呼び出しを高速化するためにSwiftでできることは何もありません。 NSJSONSerialization
ObjCとSwiftの同じクラスです。
とにかくCやC ++を伝統的に使用するものでは、Swiftが純粋なObjCよりも高速になる可能性があります。可能です [Int]
よりも速くなる NSArray
の NSNumber
特定の操作(ただし、 この質問 あなたがそれを仮定する前に NSArray
遅い)、ちょうどそれが可能です vector<int>
または int[]
同じ操作に対してより高速に(そしてほぼ同じ理由)。しかし、それは「Swiftを選択する貧しい理由です。数値計算が主要な問題であり、パフォーマンスが重要な場合、CとC ++には数十年にわたる最適化があります。量。
しかし、これらのようなマイクロベンチマークはパフォーマンスに関する質問を解決します。彼らは「あなたのアプリの全体的なパフォーマンスについてはあまり語らない」。それは、実際のコードをプロファイリングし、ボトルネックを最適化することから来ています。そして、ある種のパフォーマンスを改善する必要があるときに長い間ObjCをCまたはC ++に変換したように、Swiftコードの一部をObjC(またはCまたはC ++)に移動することを意味する場合もあります。
SwiftはObjCよりも読みやすくも理解も簡単ではありません。場合によっては、記述しやすくなります(多くの場合、はるかに難しくなります)。それ は はるかに簡単に書く 正しい より良いタイピングのためにバグの少ないコード、そしてそれが「素晴らしいと思う理由」だと思います。しかし、「簡単」だからではありません。
迅速 登場する 構文が少し近いので簡単ですJavaとJavaScript、およびJavaとJavaScriptを評価している多くの人々はJavaとJavaScriptの背景を持っていますが、Swiftは劇的に複雑な機能とCocoaで作業する際の荒削りな部分が理解をより困難にします。 as NSDictionary
上記のコードで? 新しいプログラマーはどのようにそれを知っているはずですか?同等のObjCにはそのような奇妙さはありません。より多くの作業を開始すると、いつでも非常に紛らわしい多くのコンパイラエラーを発見できます。 AnyObject
表示されます(そして常に表示されますココア)。括弧と角括弧にだまされてはいけません。ObjCは、長年のチュートリアル、StackOverflowのQ&A、書籍、およびトレーニングが用意されている非常にシンプルな言語です(ObjCコンパイラーはほとんどクラッシュしません。)
IMO、不明な場合は、ObjCを使用します。 ObjCはCocoaの設計対象です。 ObjCには定評のあるコンパイラがあります。 ObjCは簡単に習得できます(「飛び込んで物事をハッキングするのは難しいですが、実際に習得するのは簡単です」)。
スウィフトが落ち着くと(そしてそれはすぐに落ち着くダウン)、アプリの一部をSwiftに変換できます。 Swiftは、この方法で混合できるように設計されており、実際には(特に新しいObjCアノテーションを使用して)それを簡単に行えるようになっています。
一方、「期限が厳しくなく、Swiftの方が好きな人は、それを選んでください。いつかはそれが素晴らしい言語になると思います」。