在Cocoa中,何时应该使用NSAssert,NSException,NSError?
这就是我一直在想的:
NSAssert - 在创建任何用于程序员自身利益的客户端程序时,可以仔细检查规则,约定,假设或前置条件和后置条件?
NSException - 为了使用该库的其他程序员的利益创建第三方库,以便他们立即知道输入何时无效?
NSError - 当与外部系统连接以获取不保证给我结果的文件,数据库或Web服务等数据时?
在Xcode 5之前,可以NSAssert使用默认的构建设置阻止发布版本包含语句及其变体:
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
Run Code Online (Sandbox Code Playgroud)
此设置可project.pbxproj在此处找到并在Xcode中设置:

(请注意,此抓取是从转换为Xcode 5的Xcode 4项目中获取的.)
每个目标只在Release版本中继承此设置.显然这是一件好事.该应用程序可能无论如何都会挣扎,而不是立即崩溃.而对于Debug版本,您希望在NSAssert失败时立即知道.
但是,我很难找到Xcode 5中的等价物.
使用默认模板创建新项目不会显示等效设置:

我的问题是,Xcode 5中的等效设置是什么,还是NS_BLOCK_ASSERTIONS必须手动添加到Other C FlagsRelease版本中?
是否NS_BLOCK_ASSERTIONS仅关闭NSAssert呼叫或assert()呼叫.我的应用程序在assert(...)声明行的发布模式下崩溃.
该文档仅说明NSAssert并且不会告知assert()呼叫是否被禁用.
有几个与我有关的问题没有回答.我在这里链接他们:
Objective-C中的NS_BLOCK_ASSERTIONS
NSAssert与断言:您使用哪种,何时使用?
如何知道在发布版本中是否禁用了NSAssert?