由于我比较菜,写 iOS 的,线上 app 出现了一次 crash ,然后主管就问我,为什么你的代码中没有 try catch 。额,然后他还问了:某宝,支付某(号称他以前的同事),然后他们都说 都是这么这么做的。哎,然后我知乎了一下下, http://www.zhihu.com/question/21248079 。哎!
1
zwo 2015-10-14 16:46:00 +08:00
try catch 根本就没用,大部分异常都 catch 不到,该崩溃还是崩溃。但是在 swift 下, try-catch 的作用被强化了。
|
2
longgeaiwp 2015-10-14 16:50:24 +08:00
try catch 非常有用,我记得知乎上有一个相关问题,里面说的很清楚了。但是 OC 里面 try catch 有点弱鸡那是设计问题了, swift 的 try catch 用途强很多
|
3
lion9527 2015-10-14 18:04:29 +08:00
并没什么卵用,而且 catch 段严重影响性能。
曾经试过 5s 一次的 try catch ,真机上超过 2 分钟就挂了。 |
4
dorentus 2015-10-14 20:57:25 +08:00 via iPad
Swift 的是错误处理不是异常捕获,对应的是 Objective-C 里面的 NSError* 作为参数的用法
|
5
ffffwh 2015-10-14 22:10:04 +08:00
"都是这么这么做的"
具体怎么做的? catch 到异常是没问题的,怎么恢复运行呢? |
6
ineed123 OP @zwo 我是的 OC ,我昨天还没时间仔细查,但是好像 try catch 只能捕获一些简单问题,今天看看官方文档咋说。
|
7
ineed123 OP @longgeaiwp 只有你一个人说非常有用,能简单说一下你是怎么用的吗? 是捕获啥?空指针?数组越界?网络异常?
|
9
ineed123 OP @dorentus 网上都是这么说,其实我就很想知道,在 OC 中存在 try catch 的原因是神马?在神马情况下更加倾向于 try catch 呢?
|
10
ineed123 OP @ffffwh 牛人就给了一个“都是这么做的”回答。 但是我记得我看过斯坦福那老头视频里面讲的一段话,说再 OC 中,是不建议使用 try catch 的,也没有必要使用 try catch 来捕获。好像是的,我今天再找找。
|
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 { ... } 来处理了。 |