У меня есть следующий метод. В настоящее время я использую блоки try/catch, чтобы определить, является ли аргумент классом или протоколом, и похоже, что он вызывает утечку памяти. Каков правильный способ определить, является ли классклассом или протоколом?Определить, является ли аргумент классом или протоколом
[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 Спасибо. Вы правы, мой код всегда проходил первую попытку, и это было действительно. Когда я переключил место двух попыток и попыток, он начал бросать EXC_Bad_Access, поэтому он не поймал исключение. – aryaxt