在objective-c/cocoa中抛出异常的最佳方法是什么?
当前回答
我使用[NSException raise:format:]如下所示:
[NSException raise:@"Invalid foo value" format:@"foo of %d is invalid", foo];
其他回答
只有在发现自己处于指示编程错误的情况下,并希望停止应用程序运行时,才应该抛出异常。因此,抛出异常的最好方法是使用NSAssert和NSParameterAssert宏,并确保没有定义NS_BLOCK_ASSERTIONS。
可以使用两种方法在try catch块中引发异常
@throw[NSException exceptionWithName];
或者第二种方法
NSException e;
[e raise];
我使用[NSException raise:format:]如下所示:
[NSException raise:@"Invalid foo value" format:@"foo of %d is invalid", foo];
这是我从“大书呆子牧场指南(第四版)”中学到的:
@throw [NSException exceptionWithName:@"Something is not right exception"
reason:@"Can't perform this operation because of this or that"
userInfo:nil];
使用NSError来传达失败而不是异常。
关于NSError的一些要点:
NSError allows for C style error codes (integers) to clearly identify the root cause and hopefully allow the error handler to overcome the error. You can wrap error codes from C libraries like SQLite in NSError instances very easily. NSError also has the benefit of being an object and offers a way to describe the error in more detail with its userInfo dictionary member. But best of all, NSError CANNOT be thrown so it encourages a more proactive approach to error handling, in contrast to other languages which simply throw the hot potato further and further up the call stack at which point it can only be reported to the user and not handled in any meaningful way (not if you believe in following OOP's biggest tenet of information hiding that is).
参考链接:参考
推荐文章
- Java 8: Lambda-Streams,过滤方法与异常
- 为什么ARC仍然需要@autoreleasepool ?
- 首先添加一个UIView,甚至是导航栏
- 我如何改变UIButton标题颜色?
- 如何从UIImage (Cocoa Touch)或CGImage (Core Graphics)获取像素数据?
- 为什么try{…}最后{…}好;尝试{…} catch{}坏?
- iOS -构建失败,CocoaPods无法找到头文件
- Xcode 4挂在“附加到(应用程序名称)”
- 为什么单元测试中的代码不能找到包资源?
- 以编程方式创建segue
- 在Objective-C中@synchronized如何锁定/解锁?
- 为什么在c#中使用finally ?
- Xcode构建失败“架构x86_64未定义的符号”
- 动态改变UILabel的字体大小
- registerForRemoteNotificationTypes: iOS 8.0及以上版本不支持