我有以下方法。我目前使用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謝謝。你是對的,我的代碼一直在經歷第一次嘗試,並且它是有效的。當我切換兩個try-and-catch的位置時,它開始拋出EXC_Bad_Access,所以它不是真的捕捉到異常 – aryaxt