誰かが円弧の下でobjc_getClassListを使用することができましたか?円弧の下でのobjc_getClassListの使用
基本的な問題は、パラメータの1つがクラスポインタのC配列であることです。
誰かが円弧の下でobjc_getClassListを使用することができましたか?円弧の下でのobjc_getClassListの使用
基本的な問題は、パラメータの1つがクラスポインタのC配列であることです。
このコードは、ARCの下で動作するはずです:
int numClasses;
Class *classes = NULL;
classes = NULL;
numClasses = objc_getClassList(NULL, 0);
NSLog(@"Number of classes: %d", numClasses);
if (numClasses > 0)
{
classes = (__unsafe_unretained Class *)malloc(sizeof(Class) * numClasses);
numClasses = objc_getClassList(classes, numClasses);
for (int i = 0; i < numClasses; i++) {
NSLog(@"Class name: %s", class_getName(classes[i]));
}
free(classes);
}
注記:このコードを実行するコンテキストの外でClassオブジェクトの1つを使用する場合(たとえば、これを使用する関数からの戻り値など)は、__unsafe_unretainedクラスからARCメモリ管理クラスを取得できますNSClassFromString(NSStringFromClass(classes [i]))を実行します。クラスコピーを取得するより効率的な方法があるかどうかはわかりませんが、その方法は私にとってはうまくいくようです。クラス[i]を直接返すだけでは、オブジェクトがフリー(クラス)呼び出しで解放されるため、ぶら下がりポインタで終わるでしょう。 – stuckj
良い質問を。 ARCはこのような状況ではかなり厄介なようです。私はそのファイルのために時間を費やすのではなく、問題のファイルを無効にしましたが、あなたのように、ARCを有効にしてこれを行うのが比較的簡単な方法があるかどうか不思議です。 – jlehr