V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ineed123
V2EX  ›  问与答

关于 try catch

  •  
  •   ineed123 · 2015-10-14 16:13:01 +08:00 · 3599 次点击
    这是一个创建于 3317 天前的主题,其中的信息可能已经有所发展或是发生改变。

    由于我比较菜,写 iOS 的,线上 app 出现了一次 crash ,然后主管就问我,为什么你的代码中没有 try catch 。额,然后他还问了:某宝,支付某(号称他以前的同事),然后他们都说 都是这么这么做的。哎,然后我知乎了一下下, http://www.zhihu.com/question/21248079 。哎!

    12 条回复    2015-10-15 10:49:46 +08:00
    zwo
        1
    zwo  
       2015-10-14 16:46:00 +08:00
    try catch 根本就没用,大部分异常都 catch 不到,该崩溃还是崩溃。但是在 swift 下, try-catch 的作用被强化了。
    longgeaiwp
        2
    longgeaiwp  
       2015-10-14 16:50:24 +08:00
    try catch 非常有用,我记得知乎上有一个相关问题,里面说的很清楚了。但是 OC 里面 try catch 有点弱鸡那是设计问题了, swift 的 try catch 用途强很多
    lion9527
        3
    lion9527  
       2015-10-14 18:04:29 +08:00
    并没什么卵用,而且 catch 段严重影响性能。
    曾经试过 5s 一次的 try catch ,真机上超过 2 分钟就挂了。
    dorentus
        4
    dorentus  
       2015-10-14 20:57:25 +08:00 via iPad
    Swift 的是错误处理不是异常捕获,对应的是 Objective-C 里面的 NSError* 作为参数的用法
    ffffwh
        5
    ffffwh  
       2015-10-14 22:10:04 +08:00
    "都是这么这么做的"
    具体怎么做的? catch 到异常是没问题的,怎么恢复运行呢?
    ineed123
        6
    ineed123  
    OP
       2015-10-15 09:33:37 +08:00
    @zwo 我是的 OC ,我昨天还没时间仔细查,但是好像 try catch 只能捕获一些简单问题,今天看看官方文档咋说。
    ineed123
        7
    ineed123  
    OP
       2015-10-15 09:34:45 +08:00
    @longgeaiwp 只有你一个人说非常有用,能简单说一下你是怎么用的吗? 是捕获啥?空指针?数组越界?网络异常?
    ineed123
        8
    ineed123  
    OP
       2015-10-15 09:35:17 +08:00
    @lion9527 吊、
    ineed123
        9
    ineed123  
    OP
       2015-10-15 09:36:42 +08:00
    @dorentus 网上都是这么说,其实我就很想知道,在 OC 中存在 try catch 的原因是神马?在神马情况下更加倾向于 try catch 呢?
    ineed123
        10
    ineed123  
    OP
       2015-10-15 09:39:00 +08:00
    @ffffwh 牛人就给了一个“都是这么做的”回答。 但是我记得我看过斯坦福那老头视频里面讲的一段话,说再 OC 中,是不建议使用 try catch 的,也没有必要使用 try catch 来捕获。好像是的,我今天再找找。
    dorentus
        11
    dorentus  
       2015-10-15 10:02:46 +08:00
    https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/ErrorHandling/ErrorHandling.html

    > When you ’ re writing code with Objective-C, exceptions are used solely for programmer errors, like out-of-bounds array access or invalid method arguments. These are the problems that you should find and fix during testing before you ship your app.

    > All other errors are represented by instances of the NSError class.

    对于 Swift 而言, Exception 无法被捕获和处理,而 NSError 覆盖的情况大部分都改用 do { try ... } catch { ... } 来处理了。
    ineed123
        12
    ineed123  
    OP
       2015-10-15 10:49:46 +08:00
    @dorentus 谢谢 我也正好看到了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3709 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 05:05 · PVG 13:05 · LAX 21:05 · JFK 00:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.