iPhoneとiPad - クラスを含むバイナリ増加しますか?
-
23-09-2019 - |
質問
私は私のプロジェクトで頻繁に使用するカスタムクラスを持っています。このクラスは、いくつかの方法がありますが、すべてではないそれらのは、すべてのプロジェクトで使用されます。
私の質問は:?プロジェクトでこのクラスを含め無用のコードでプロジェクトを膨らまうか、コンパイラは、単にメソッドが含まれます。
を使用 私のクラスは、30個のメソッドを持っていますが、ちょうど4は、特定のプロジェクトで使用されている場合は、私は、意味コンパイラは、他の未使用の26か、単に最終製品に使用される4?
が含まれますは、それがすべてを含む場合には、未使用の方法を無視して最小にバイナリをトリミングすることを強制する方法はありますか?
解決
リンカサポートデッドストリッピングの未使用のコードでそれを有効にした場合、発生することはありません任意の膨張ます。
アップルのドキュメントから>
静的リンカー(LD)をサポート 未使用のコードとデータブロックの除去 実行可能ファイルから。このプロセス (デッドコードストリッピングとして知られている)ことができます 全体のサイズを縮小 今度は改善の実行可能ファイル、 メモリを減らすことによって、パフォーマンス 実行可能ファイルの足跡。また プログラムが正常にリンクすることができます 未使用コードが指す場合 未定義シンボル(代わりに、得られました )リンクエラーインチ
デッドコードストリッピングがに限定されるものではなく、 唯一の未使用の関数を削除し、 バイナリから実行可能なコード。ザ・ また、リンカは未使用のシンボルを削除します そして、データブロック内に存在するデータ。 このようなシンボルは、グローバルが含まれる場合があります 変数、静的変数、および 他の人の間で文字列データ、ます。
デッドコードストリッピングが有効になっている場合、 コードの静的リンカーを検索 初期から到達不能であること ライブのシンボルとブロックの集合ます。
他のヒント
他の26個の方法が@implementation
のコードをお持ちの場合は、[はい、それらは最終製品に使用されます。
理由は、ランタイムシステムです。あなたはコンパイル時でその26個のメソッドを使用していない場合でも、彼らは(NSSelectorFromString
と-performSelector:
を覚えて)実行時に参照されることはありません。
私は知りません。 (-dead_strip
は仕事をしません。)
サウンドあなたがリファクタリングする必要があり、大きな脂肪の乳房クラスの名前を変更するようにます。
私の質問は:このクラスを含みます プロジェクトにプロジェクトを膨らまます 無用コードまたはますコンパイラで ちょうど使用した方法が含まれていますか?
私はあなたのヘルパークラスのヘッダーと実装を含めについて話していると思います。これは、バイナリサイズが大きくなります。 jessecurryによって尖ったアウトのようなリンカーは、ストリッピングデッドエンドをサポートしています。誰かがあなたのバイナリの公開API(幸い、これは動的リンクをiphone上で許可されていないように、ケースではなく、他のプラットフォームを考慮する)とのリンクを望んでいる可能性は常にありますので、これは悪いです。しかし、私はサイズの差は有意であることがあまりにも限界である賭けます。
サイズの点で最も影響は通常、あなたのアプリケーションに含まれるリソース(画像、文字列など。)。