3

実行時にアプリにロードされたクラスのリストを取得しようとしています。ロードされたクラスだけで、すべてのクラスは気にしません。私はすべてのクラスのリストを取得する方法を知っていますが、それらを繰り返しチェックして、ロードされたバンドルに含まれているかどうかを確認すると、ランダムなクラッシュが発生し、やり過ぎの方法のように思えます。

NSLoadedClasses への参照を見たことがありますが、実際には何も見つかりません。また、iOS (vs Mac) に適用できるかどうかもわかりません。これを取得するための正しい方法は何ですか? 繰り返しますが、実行時に必要です。

4

1 に答える 1

4

Looks like I figured it out. If you need to do this, here's how to do it:

#import <objc/runtime.h>
#import <dlfcn.h>
#import <mach-o/ldsyms.h>


unsigned int count;
const char **classes;
Dl_info info;

dladdr(&_mh_execute_header, &info);
classes = objc_copyClassNamesForImage(info.dli_fname, &count);

for (int i = 0; i < count; i++) {
  NSLog(@"Class name: %s", classes[i]);
  Class class = NSClassFromString ([NSString stringWithCString:classes[i] encoding:NSUTF8StringEncoding]);
  // Do something with class

}
于 2013-03-01T03:35:58.940 に答える