目标 c 中的异常传播
Posted
技术标签:
【中文标题】目标 c 中的异常传播【英文标题】:Exception propagation in objective c 【发布时间】:2014-05-12 08:45:31 【问题描述】:我是 Objective-c 的新手并创建了一个自定义异常。我想在 implementationC 的 functin1() 中处理一个异常(在 function3() 中抛出)。这是我的代码:
@implementatin A
function3()
if(contion)
throw [[ApiException alloc] initwithName:@"", reasong:@"" userInfo:nil];
@implementatin B
function2()
function3();
@implementatin C
function1()
function2();
【问题讨论】:
你的问题是什么?@try / @catch / @finally
想要在实现 C 的 functin1() 中处理异常(在 function3() 中抛出)。
异常在 Obj-C 中并不常见。你可能不应该使用它们。
你的代码离编译太远了。你应该先阅读关于objective-c的教程......
【参考方案1】:
您可以通过捕获并重新抛出异常来传播异常:
@try
[self doSomethingElse:anArray];
@catch (NSException *theException)
@throw;
但是您需要知道,Objective-C 异常与 C++ 异常不同,如果不小心使用可能会导致泄漏。使用它们可能是个坏主意。确保您正确阅读 Apple 的 Exception Programming Guide。
【讨论】:
【参考方案2】:显然你对 Objective-C 很陌生:没有函数,只有方法。所以我的第一个建议是买一本书或教程。
除此之外:您知道在Objective-C 中异常不是 处理错误的首选吗? https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Exceptions/Exceptions.html
其中一个原因是,ARC 不适用于开箱即用的异常。 (您必须打开异常处理,这会导致运行时损失。)
问您:通常您使用NSException
创建异常并使用@throw
抛出它们。你有通常的 try-catch-finally 重新抛出模式来处理它们:
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Exceptions/Tasks/HandlingExceptions.html#//apple_ref/doc/uid/20000059-BBCHGJIJ
@try
// something that can throw an exception
@catch (…)
// catch it here
@throw; // rethrow the catched exception.
【讨论】:
以上是关于目标 c 中的异常传播的主要内容,如果未能解决你的问题,请参考以下文章