NSError是专为非致命的,可恢复的错误。被设计成由一个NSError被捕获的问题是经常用户的错误(或者是可以呈现给用户的错误),通常可以从(因此-presentError:和NSErrorRecoveryAttempting)中回收,并且通常预期或预测的错误(喜欢尝试打开您没有访问文件,或者试图不兼容的字符串编码之间进行转换)。
NSException被设计为具有潜在致命的,程序员的错误。这些错误的目的是表明潜在缺陷在应用程序中,你有没有核对无误的前提条件执行某些操作(如试图访问超出其边界,或企图发生变异不可变对象数组索引)。引入到异常编程Guideexplains这一点。