다음 메소드가 있습니다. 나는 현재 try/catch 블록을 사용하여 인수가 클래스인지 프로토콜인지를 확인하고 메모리 누수의 원인 인 것처럼 보입니다. x
이 클래스인지 프로토콜인지를 확인하는 올바른 방법은 무엇입니까?인수가 클래스인지 프로토콜인지 확인하십시오.
[self _injectMacro:[MyClass class]];
[self _injectMacro:@protocol(MyProtocol)];
+ (id)_injectMacro:(id)x
{
@try {
return NSStringFromProtocol(x);
}
@catch (NSException *exception) {
}
@try {
return NSStringFromClass(x);
}
@catch (NSException *exception) {
}
return nil;
}
클래스/프로토콜이 존재하지 않는 경우 어떤 일이 발생하는지 어느 방법 문서를. 오늘 코드가 작동하더라도 내일이 아닐 수도 있습니다. –
코코아는 일반적으로 예외 안전하지 않습니다. 잡기를 계속하면 메모리 누수와 같은 문제가 발생할 수 있습니다. 반면에, 이러한 함수는 내가 아는 한 예외를 던지지 않습니다. 이 코드가 실제로 예상 한대로 작동합니까? –
@ JoshCaswell Thanks. 당신은 내 코드가 항상 첫 번째 시도를 통해 진행되고 있다는 것과 맞습니다. 두 try-catch의 장소를 바꿨을 때 EXC_Bad_Access를 던지기 시작했기 때문에 예외를 잡기가 정말로 어려웠습니다 – aryaxt