たとえば、私は私のプロジェクトで2つのライブラリ(AとB)を使用しています。ライブラリAにはカスタムボタンクラスがあり、Bには同じボタンクラスがあります。 ボタンはどのライブラリからシステムに伝えられますか?Objective-Cの異なるライブラリからコードを区別するにはどうすればよいですか?
1
A
答えて
0
ライブラリには、含まれるクラスのリストが含まれています。コマンドラインツールotool
を使用して、このリストを自分で読むことができます。 -o
スイッチを使用すると、ライブラリのObjective-Cセクションが表示されます。
otoolコマンドは、オブジェクトファイルまたはライブラリの指定部分を表示します。 ... -o Objective-Cランタイムシステムで使用される__OBJCセグメントの内容を表示します。あなたが
otool -o /Applications/TextEdit.app/Contents/MacOS/TextEdit
を入力した場合
だから、あなたはこのような出力が得られます。
Contents of (__DATA,__objc_classlist) section
000000010001cf80 0x100021c50
isa 0x100021c78
superclass 0x0
cache 0x0
vtable 0x0
data 0x10001db80 (struct class_ro_t *)
flags 0x10
instanceStart 104
instanceSize 288
reserved 0x0
ivarLayout 0x0
name 0x10001954f Document
baseMethods 0x10001d030 (struct method_list_t *)
entsize 24
count 78
name 0x10001591d makeWindowControllers
types 0x10001979b [email protected]:8
imp
name 0x100015fee writableTypesForSaveOperation:ignoreTemporaryState:
types 0x10001987f @[email protected]:8Q16c24
imp
...
をプロセスがOSを要求すると、共有ライブラリを開いたり、プラグイン・バンドルをしますOSは上記のデータを読み込み、ライブラリに含まれるクラスのリストを生成します。また、エクスポートされた関数も検索されます。動的リンカーとローダー(dyld)について読むことができます。特に、関数dlopen()
は、この情報がディスクから読み取られる場所です。
また、ライブラリAとBのカスタムボタンクラスの名前を異なるようにすることをお勧めします。そうでない場合は、実行時にどちらが使用されるかは未定義です。いずれかを使用することができます。これは、Objective-Cにネームスペースがないため、実行時に名前で表示されるためです。
関連する問題
- 1. いくつかの異なるMKポリゴンオーバーレイを区別するにはどうすればよいですか?
- 2. TypeScriptで2つの異なるオブジェクトタイプを区別するにはどうすればよいですか?
- 3. iOS UITests - 2つの異なるXCUIElementを区別するにはどうすればよいですか?
- 4. 同じイベントで2つの異なるボタンを区別するにはどうすればいいですか?
- 5. Firefoxのタブを区別するにはどうすればよいですか?
- 6. バックグラウンドセッションでダウンロードタスクを区別するにはどうすればよいですか?
- 7. 異なるクラスの異なるコメントでコードをチェックインするにはどうすればよいですか?
- 8. ネイティブ対ハイブリッドモバイルアプリケーションを区別するにはどうすればよいですか?
- 9. ピンチズームとクリックを区別するにはどうすればよいですか?
- 10. Goコードをライブラリにするにはどうすればよいですか?
- 11. ユーザ定義/ライブラリ関数とコンパイル済みファイルを区別するにはどうすればよいですか?
- 12. 文字列のコードがJSコードかCSSコードかどうかを区別するにはどうすればよいですか?
- 13. 異なるユーザー/ユーザーセッションから異なるショッピングカートを表示するにはどうすればよいですか?
- 14. SubActivityからアンドロイドアクティビティをプログラム的に区別するにはどうすればよいですか?
- 15. プロセスメモリの異なる部分をどのように区別できますか?
- 16. ラジオボタンを区別するにはどうすればいいですか?
- 17. 投稿フォームを区別するにはどうすればいいですか?
- 18. USBシリアルコンバータを区別するにはどうすればいいですか?
- 19. 別のフォルダからPythonライブラリをインポートするにはどうすればよいですか?
- 20. Lua - 別のライブラリからlibを使用するにはどうすればよいですか?
- 21. これらのジェネリッククラスは、異なるdiv間でどのように区別できますか?
- 22. (SQL)2つの列を同じ名前で異なるテーブルから区別するにはどうすればよいですか?
- 23. 別のページから特定のコードを無効にするにはどうすればよいですか?
- 24. ログイン後に異なるユーザーを別のページに誘導するにはどうすればよいですか?
- 25. さまざまな種類の例外を区別するにはどうすればよいですか?
- 26. TypeScriptで一般的なオブザーバブルタイプを区別するにはどうすればよいですか?
- 27. 異なるプラットフォームでUWPのコードを管理するにはどうすればよいですか?
- 28. 別のページに異なるヘッダーを追加するにはどうすればよいですか?
- 29. 個別のログハンドラに異なる名前を設定するにはどうすればよいですか?
- 30. 異なるスプリングコンフィグレーションファイルからロードされたBeanを区別する
私はまだ、さまざまなライブラリを区別するためにどのようなデータを使用できるか分かりません。 –
実行時にクラスを動的にロードする方法に関する追加情報を追加しました。 – user1118321