将NSNumber值与定义的int进行比较

3

我试图存储一个常量int值用于在特定场景下进行比较。我的定义如下:

#define kApiSuccessCode 0

我有一个方法,它比较状态码(NSNumber)并返回一个BOOL结果:

- (BOOL)isSuccess {
    return [self.statusCode isEqualToNumber:[NSNumber numberWithInt:kApiSuccessCode]];
}

我有一个像这样的综合NSNumber属性:

@property (nonatomic, strong) NSNumber *statusCode;

问题是我在运行这段代码时遇到了一个“执行被中断,原因:EXC_BAD_ACCESS”错误 - 我不知道为什么?这是一种比较整数值的不好方法吗?谢谢
解决方案:
结果证明,我犯了基本错误,尝试使用NSLog输出BOOL值,即NSLog(@"Does this work? %@", [response isSuccess])。所以代码本身可以运行-但感谢大家提供的使其更有效的建议!

2
一旦你弄清楚了这个问题,我建议你改成这样:return [self.statusCode intValue] == kApiSuccessCode; - lnafziger
3个回答

4
我不知道为什么会发生崩溃,但是回答你的另一个问题,是的,这不是一个很好的比较 int 值的方式。
存储值在 NSNumber 实例中有合理的原因,但在大多数情况下过于复杂。如果您确实有一个 NSNumber 实例,只需使用 intValue 获取其整数值并将其与原始类型进行比较,而不是创建一个全新的实例。
如果您查看 Foundation 类,您会发现大多数时候它们依赖于 NSInteger 原始类型而不是 NSNumber 实例。例如,NSURLResponse 类使用 NSInteger 返回 HTTP 状态码。

2

按照这篇文章的指示,我会启用Zombies。

这将告诉您是否将消息发送到已释放变量的实例。

一旦您弄清楚了这一点,我建议改用以下方法:

- (BOOL)isSuccess {
    return [self.statusCode intValue] == kApiSuccessCode; 
}

0

#define与常量的优缺点?

正如其他人所提到的,#define没有与之关联的类型

=> kApiSuccessCode不是整数,预编译器在编译程序之前只会将其替换为0


是的,你说得对,kApiSuccessCode将被替换为0,但在上下文中它是一个整数。 - Inder Kumar Rathore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接