2017-11-28 9 views

答えて

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にネームスペースがないため、実行時に名前で表示されるためです。

+0

私はまだ、さまざまなライブラリを区別するためにどのようなデータを使用できるか分かりません。 –

+0

実行時にクラスを動的にロードする方法に関する追加情報を追加しました。 – user1118321

関連する問題