我正在尝试存储一个常量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])
。所以代码本身也有效 - 但感谢大家提出的提高效率的建议!
答案 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
替换它。