Objective-c 런타임 함수를 사용하여 특정 유형의 모든 클래스 문자열 값을 가져 오려면 다음 유틸리티 클래스를 어떻게 다시 작성할 수 있습니까? *realloc() & ARC
classList = realloc(classList, sizeof(Class) * numClasses);
"비 목표 - C의 포인터 타입의 암시 적 변환 '무효 :
는 ARC 문서는 특히 realloc을 피해야한다한다고 나는이에이 줄을 다음과 같은 컴파일러 오류 'to'__unsafe_unretained 클래스 * '은 (는) ARC에서 허용되지 않습니다. "
아래 코드는 here에서 찾을 수있는 원본 문서에 대한 참조입니다.
+ (NSArray *)classStringsForClassesOfType:(Class)filterType {
int numClasses = 0, newNumClasses = objc_getClassList(NULL, 0);
Class *classList = NULL;
while (numClasses < newNumClasses) {
numClasses = newNumClasses;
classList = realloc(classList, sizeof(Class) * numClasses);
newNumClasses = objc_getClassList(classList, numClasses);
}
NSMutableArray *classesArray = [NSMutableArray array];
for (int i = 0; i < numClasses; i++) {
Class superClass = classList[i];
do {
superClass = class_getSuperclass(superClass);
if (superClass == filterType) {
[classesArray addObject:NSStringFromClass(classList[i])];
break;
}
} while (superClass);
}
free(classList);
return classesArray;
}
귀하의 도움을 많이 주시면 감사하겠습니다.
명시 적 캐스트 (void *) classList를 수행하면됩니다. realloc을 사용하지 않는 것도 고려하십시오. 여기서 무엇을하려고합니까? – Dustin
정말 ARC로 코드를 실행해야합니까, 아니면 비 ARC 모드에서 코드를 실행할 수 있습니까? (원하는 경우 원하는 클래스의 타겟 빌드 설정에서'-fno-objc-arc' 플래그 사용) ARC 비활성화). 참조 : http://stackoverflow.com/questions/6646052/how-can-i-disable-arc-for-a-single-file-in-a-project –
@WolfgangSchreurs 고마워, 나는 링커 플래그 옵션을 완전히 잊어 버렸다. . – RynoB