今天在看公司同事代码的时候,发现同事用了NSParameterAssert这个函数来检查参数值。
+ (void)getUrlForUploadPicture:(NSString *)pictureFile
completionBlock:(UploadPictureCompletionBlock)completionBlock
{
NSParameterAssert(pictureFile);
}
比如上面的方法,这个方法中使用NSParameterAssert来检验pictureFile这个参数的值,如果为nil或NULL,那么此时程序终止,并打印错误信息。
我的疑问一直停留在要是应用上线之后还用这个函数,那不是很危险吗,用户的使用过程中如果发生问题应用直接崩溃,用户体验是极差的。然后网上看了一些资料,说的是在debug版本下程序才会abort,在release版本则不会。
附上苹果的文档说明:
Validates the specified parameter.(验证指定的参数)
Assertions evaluate a condition and, if the condition evaluates to false, call the assertion handler for the current thread, passing it a format string and a variable number of arguments. Each thread has its own assertion handler, which is an object of class NSAssertionHandler. When invoked, an assertion handler prints an error message that includes method and class names (or the function name). It then raises an NSInternalInconsistencyException exception.
This macro validates a parameter for an Objective-C method. Simply provide the parameter as the condition argument. The macro evaluates the parameter and, if it is false, it logs an error message that includes the parameter and then raises an exception.
Assertions are disabled if the preprocessor macro NS_BLOCK_ASSERTIONS is defined. All assertion macros return void.
Important
Do not call functions with side effects in the condition parameter of this macro. The condition parameter is not evaluated when assertions are disabled, so if you call functions with side effects, those functions may never get called when you build the project in a non-debug configuration.
Note
Not all release configurations disable assertions by default.
英文不好,只能读懂个大概,就不翻译了。