qic*_*ren 40 xcode objective-c ios
我经常在iOS代码中看到"断言",我谷歌它,并且知道它断言是真还是假.
我想知道这是否会在发布模式下自动禁用?
zap*_*aph 41
使用NSAssert()及其随附数.
在项目中定义NS_BLOCK_ASSERTIONS
您的发布配置.
Xcode 4 NSAsserts
在释放配置中对tremplates进行禁用.它补充道
-DNS_BLOCK_ASSERTIONS=1
Run Code Online (Sandbox Code Playgroud)
"释放"的"其他C标志".
从文档:
如果NS_BLOCK_ASSERTIONS
定义了预处理器宏,则会禁用断言.
NSAssert宏评估条件并充当断言处理程序的前端.
每个线程都有自己的断言处理程序,它是类的对象NSAssertionHandler
.调用时,断言处理程序会输出包含方法和类名(或函数名)的错误消息.然后它引发了一个NSInternalInconsistencyException
例外.如果condition的计算结果为NO,则宏将调用handleFailureInMethod:object:file:lineNumber:description:
当前线程的断言处理程序,并将desc作为描述字符串传递.
此宏应仅在Objective-C方法中使用.
Jef*_*eff 38
更新:已验证此功能也适用于Xcode 8.
在Xcode 7中,进入项目构建设置并在搜索栏中搜索"Assert".这显示"Apple LLVM 7.0 - 预处理"部分.有一个名为"Enable Foundation Assertions"的设置.
我从那里成功启用/禁用了NSAssert.
Rob*_*ier 27
我将在这里提供一个元答案:
@CocoaFu和@dasblinkenlight都是正确的.NS_BLOCK_ASSERTIONS
关闭NSAssert()
然后NDEBUG
关闭assert()
.如果同时使用两者,则需要两者.
正如扎普所说,-DNS_BLOCK_ASSERTIONS=1
即将发布.但是,如果你想检查一下.
首先在文档中观察宏禁用NSAssertNS_BLOCK_ASSERTIONS
.然后将其添加到构建并观察它符合ok:
#ifdef NS_BLOCK_ASSERTIONS
#error Error - NS_BLOCK_ASSERTIONS is defined
#endif
Run Code Online (Sandbox Code Playgroud)
然后将方案更改为释放(cmd - shift - <)
然后观察构建失败.因此NS_BLOCK_ASSERTIONS
定义意义NSAssert
s被禁用.
归档时间: |
|
查看次数: |
23290 次 |
最近记录: |