目标c中的异常传播

时间:2014-05-12 08:45:32

标签: objective-c nsexception

我是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();
      }

2 个答案:

答案 0 :(得分:1)

您可以通过捕获并重新抛出异常来传播异常:

@try {
    [self doSomethingElse:anArray];
}
@catch (NSException *theException) {
    @throw;
}

但是,您需要知道Objective-C异常与C ++异常不同,如果不小心使用,可能会导致泄漏。他们的使用可能是一个坏主意。确保您正确阅读了Apple的Exception Programming Guide

答案 1 :(得分:1)

显然你对Objective-C很新:没有函数,只有方法。所以我的第一个建议是获得一本书或教程。

除此之外:您是否知道在Objective-C异常中是处理错误的首选? https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Exceptions/Exceptions.html

其中一个原因是,ARC不适用于开箱即用的例外情况。 (您必须打开异常处理,这会导致运行时损失。)

问答:通常,您使用NSException创建例外,并将其与@throw一起投放。你有通常的try-catch-finally rethrow模式来处理它们: 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.
}