当您在ObjC @catch
块中捕获到异常时,该异常对象的生命周期是什么?我知道我可以在块内安全地使用它,但是如果我想在块之后再次使用它,像这样?@catch块中捕获的对象的生命周期是什么?
NSException * exception = nil;
@try {
// do something risky
} @catch(NSException * e) {
exception = e;
}
if (exception) {
NSLog(@"Caught exception: %@", exception);
}
我可以放心地藏匿参考到另一个地方?为了安全起见,我应该做些什么?我可以保留它并无限期地保持它吗?
(如果我将其分配给本地,或者稍后保留并使用,但文档没有真正讨论此对象“来自”所有权或它是否特殊,那么似乎工作正常我正在寻找更多的清晰度。)
从书的建议好像没用。这只是描述了正常的内存管理策略。它描述的问题是,如果你释放没有保留,或保留没有释放(或自动释放)。如果你们两个都这样做,我想这应该不是问题。 – morningstar
唯一的相关行这里似乎是“NSException的所有实例都放置在主自动释放池。”我希望有一个指向Apple文档的指针说明了这一点,并且明确指出这与堆栈的关系如何从异常中解脱出来。 (例如,是它奇迹般地放在顶部自动释放池在它抓住了?或者它的抛出点,假设该池没有得到清理) –
我敢肯定,这意味着当前autoreleasepool – hooleyhoop