【问题标题】:Exception propagation in objective c目标 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的教程......

标签: objective-c nsexception


【解决方案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.
    }
    

    【讨论】:

      猜你喜欢
      • 2012-10-22
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      • 2017-02-15
      • 1970-01-01
      相关资源
      最近更新 更多