私のプロジェクトには、C 関数のみを含む doSomething.m および soSomething.h ファイルがあります。
void doSomething() {
}
最初の質問: ヘッダーをインポートする必要なく、コード内の任意の場所からこの関数にアクセスできるようにするにはどうすればよいですか?
注:この問題を解決するために doSomething.h ファイルはまったく必要ないと思いますが、その有無は制限ではありません。
私は次の知識を持っていますが、必要なものの全体像を把握できません。
- コンパイルの実行時に実行されるattribute((constructor))を持つ別の関数を使用でき、 doSomethingを登録するための操作を行うことができます。
- _class_addMethod_ は「実行時」にメソッドを追加します。しかし、「グローバル名前空間のクラス」を解決する方法がわかりません。
- NSObject の+ loadメソッドですが、ここでは関係ありません。
最初の質問に加えて2 番目のトリッキーな質問: 最初の質問に対する回答が得られた場合、「関数 'doSomething' の暗黙的な宣言は C99 では無効です」を防ぐにはどうすればよいですか? ?
更新:次のオプションを考慮から除外するのを忘れていました:
- .pch ファイル、グローバル ヘッダー
- doSomethingメソッドを使用するファイルには、extern void doSomething()のような追加の宣言を含めないでください。