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

时间:2012-03-23 03:37:50

标签: objective-c ios

我正在尝试存储一个常量int值,以便在特定场景中进行比较。我的定义如下:

#define kApiSuccessCode 0

我有一种方法可以将状态代码(NSNumber)与此进行比较,以得到BOOL结果:

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

我有一个合成的NSNumber属性,如下所示:

@property (nonatomic, strong) NSNumber *statusCode;

问题是我得到执行被中断,原因:运行此代码时出现EXC_BAD_ACCESS错误 - 我无法解决原因?这是比较int值的坏方法吗?感谢

解决:

事实证明,我犯了一个基本错误:尝试NSLog BOOL值,NSLog(@"Does this work? %@", [response isSuccess])。所以代码本身也有效 - 但感谢大家提出的提高效率的建议!

3 个答案:

答案 0 :(得分:4)

我不知道为什么会发生崩溃,但回答你的另一个问题,是的,这不是比较int值的好方法。

有正当理由在NSNumber个实例中存储值,但在大多数情况下,它是过度的。实际上,如果你有一个NSNumber实例,只需使用intValue获取它的整数值并将其与原语进行比较,而不是创建一个全新的实例。

如果你看一下基础课程,你会看到大多数时候,他们依赖于NSInteger原始类型而不是NSNumber个实例。例如,NSURLResponse类使用NSInteger返回HTTP状态代码。

答案 1 :(得分:2)

我会按照this post中的说明启用Zombies。

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

一旦你搞清楚了,我会建议:

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

答案 2 :(得分:0)

Advantage and disadvantages of #define vs. constants?

As mentioned by others, #define doesn't have a type associated with it

=> kApiSuccessCode不是整数,在编译程序之前,预编译器只需用0替换它。