⸻
📘 NSAssert 使用教程(简洁版)
什么是 NSAssert?
NSAssert 是 Objective-C 提供的调试工具,用于在开发阶段检测程序是否满足特定条件。如果条件为假(NO),它会抛出异常并打印错误信息,帮助你在调试时尽早发现问题。
基本语法
NSAssert(condition, @"错误信息,可带格式化参数", ...);
• condition:布尔条件,判断是否满足预期。
• 第二个参数:发生断言失败时的提示信息。
示例
- (void)setUser:(User *)user { NSAssert(user != nil, @"User must not be nil"); _user = user; }
如果传入 nil,在 Debug 模式下会 crash,并输出提示。
⸻
NSAssert 生效范围
NSAssert 只在 Debug 模式 下有效(默认情况下)。在 Release 模式下,它会被编译器移除,不执行任何检查。
因此,它只能用于开发阶段的调试和逻辑验证。
⸻
常见使用场景 1. 内部方法参数验证
-
(void)setAge:(NSNumber *)age { NSAssert(age != nil, @"age should not be nil"); }
- 状态依赖检查
-
(void)start { NSAssert(self.isReady, @"Must be ready before starting"); }
- 模拟抽象方法(要求子类重写)
-
(void)doSomething { NSAssert(NO, @"Subclasses must override doSomething"); }
- 数组/字典必须有值时检查
NSAssert(self.items.count > 0, @"items should not be empty");
⸻
NSParameterAssert 简介
是 NSAssert 的一个特化宏,用于检查参数:
- (void)setName:(NSString *)name { NSParameterAssert(name.length > 0); }
等价于:
NSAssert(name.length > 0, @"Invalid parameter not satisfying: name.length > 0");
⸻
建议和最佳实践 • ✅ 用于调试阶段检查内部逻辑是否符合预期 • ❌ 不要用于正式环境中依赖的判断逻辑 • ✅ 错误提示尽量写得详细清晰 • ❌ 不要滥用在用户输入、网络返回等不可靠的地方 • ✅ 适合用来检查永远“理论上不应该为假”的假设
⸻
与其他工具对比
场景 推荐工具 开发调试中逻辑校验 NSAssert 正式环境参数防御 if 判断 + return/throw Swift 中断言 assert() / precondition()
⸻
高级技巧
使用 PRETTY_FUNCTION 输出调用位置:
NSAssert(condition, @"[%s] 状态错误", PRETTY_FUNCTION);
可以帮助你快速定位出错的方法。
⸻
总结 • NSAssert 是开发时的断言工具,用于及时发现潜在逻辑错误。 • 不要在正式环境中依赖它作为逻辑判断或兜底。 • 建议只在你100% 确信条件必须满足的地方使用它。
⸻