首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Objective-C中的NS_BLOCK_ASSERTIONS

Objective-C中的NS_BLOCK_ASSERTIONS
EN

Stack Overflow用户
提问于 2011-06-23 03:11:37
回答 2查看 14.7K关注 0票数 38

我在iPhone应用程序中使用NSAssert()调用,我从苹果文档中了解到,如果定义了NS_BLOCK_ASSERTIONS,则断言不会编译到代码中。

要关闭断言,我在一个头文件中声明:#define NS_BLOCK_ASSERTIONS

但是,断言代码似乎仍在运行。

我是不是漏掉了什么?

谢谢

约翰

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-23 03:31:00

如果您基于其中一个标准模板创建了Xcode项目,则Cocoa头文件(包括包含NSAssert宏的NSException.h )将在项目中的任何其他文件之前进行预处理。因此,任何项目的头文件或实现文件中的#define NS_BLOCK_ASSERTIONS都不会影响NSAssert宏。

尝试将NS_BLOCK_ASSERTIONS放入目标甚至项目的预处理器宏中(仅适用于release配置):

或者将#define NS_BLOCK_ASSERTIONS放在#import <Cocoa/Cocoa.h>#import <Foundation/Foundation.h>行之前的前缀(.pch)报头中。

票数 63
EN

Stack Overflow用户

发布于 2014-10-10 21:31:57

正如@dwsolberg提到的,Xcode有一个名为ENABLE_NS_ASSERTIONS的新构建设置。对于新项目,其release配置的值被设置为NO,而对于所有其他配置,它的值被设置为YES。您可以使用这个设置,也可以使用广泛使用的NS_BLOCK_ASSERTIONS方法,该方法在Xcode6中仍然有效。

断言是一种在开发时跟踪错误的工具,不应该在生产代码中触发!此外,只有在绝对必要的情况下才应该使用异常,例如,如果出现了非常严重的错误,导致程序员无法继续执行。Cocoa的方式是给关键方法一个布尔返回值,并用一个错误对象参数化它们,该错误对象可以在方法内部设置,如果返回值为NO,则可以在外部使用该对象。

希望这能帮助一些人;-)

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6445222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档