我正在编写一个自定义断言宏,当断言失败时,这个函数被称为
void _XLCAssertionFailedCritical(NSString *format, ...)
{
va_list ap;
va_start(ap, format);
// this suppose to throw exception
[NSException raise:NSInternalInconsistencyException format:format arguments:ap];
va_end(ap); // <---- this line is unreachable?
}
但后来我意识到这个函数有内存泄漏... va_end(ap);
无法访问。
我可以使用其他方法来创建和抛出异常,但这种方法只是困扰我。在没有内存泄漏的情况下似乎无法使用它?
我理解异常并不是假设在正常的控制流中发生的事情,但即使在特殊情况下,我仍然希望编写无内存泄漏的问题。
这个方法意味着一个方便的方法,所以用一些格式字符串引发异常可以更简单。但是内存泄漏的代价呢?
答案 0 :(得分:0)
我不确定这是否会导致泄漏,特别是如果它是一个断言它是致命的,但它看起来不是很好。我建议格式化字符串,然后将其直接传递给[NSException raise:format:]
void _XLCAssertionFailedCritical(NSString *format, ...)
{
va_list ap;
va_start(ap, format);
NSString *message = [[NSString alloc] initWithFormat:format
arguments:ap];
va_end(ap);
[NSException raise:NSInternalInconsistencyException
format:@"%@", message];
}