4

十数個のクラスとカテゴリを持つカスタム フレームワークがあるとします。それらはすべて、標準のココア クラスを継承/拡張します。このため、私のフレームワークはコンパイル中に < Cocoa > にリンクします。

私の質問は、< QuartzCore > を必要とするクラスを追加する場合、それをパッケージ化するための推奨される方法は何ですか?

1) フレームワークにクラスを追加して QuartzCore をインポートするだけの場合、フレームワークのすべてのコンシューマーも QuartzCore をインポートする必要があります。

2) クラスを別のフレームワークに移動する場合、すべてのコンシューマーは、QuartzCore だけでなく、両方のフレームワークをインポートして完全な機能を取得する必要があります。最初のフレームワークのどのクラスも、2 番目のフレームワークを使用できません。

3) #ifdef #endif などを実行してから、QuartzCore フレームワークを弱リンクして、Cocoa 標準クラスと QuartzCore 依存クラスの両方が単一のフレームワーク内にあるが、消費者が QuartzCore を追加する必要がないようにする方法はありますか?彼らのプロジェクトに?QuartzCore が理想的に存在しない場合、クラス/カテゴリはランタイムで利用できません。

4

1 に答える 1

2

個人的には#1でいいと思います。とにかく、重要なアプリはほとんどすべて QuartzCore にリンクする必要があります。

フレームワークを自分のものに弱リンクできます。リンク先のフレームワークから QuartzCore を削除し、「Other Linker Flags」に引数「-weak_framework QuartzCore」を追加します。

弱いリンクに関する完全なドキュメントは Xcode にあります。「Weak Linking With Apple Frameworks」というガイドがあります。

于 2012-04-11T17:01:06.467 に答える