[英]Comparing NSNumber value with defined int
我正在尝试存储一个常量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])
。 因此,代码本身可以正常工作-但感谢大家为您提供提高效率的建议!
我不知道为什么发生崩溃,但是要回答您的另一个问题,是的,这不是比较int值的好方法。
有充分的理由将值存储在NSNumber
实例中,但是在大多数情况下,这是过大了。 如果确实有一个NSNumber
实例,则只需使用intValue
即可获取它的整数值并将其与原始值进行比较,而无需创建一个全新的实例。
如果您查看Foundation类,则大多数时候都会看到它们,它们依赖于NSInteger
基本类型而不是NSNumber
实例。 例如, NSURLResponse
类使用NSInteger
返回HTTP状态代码。
在指示我将使僵尸这个职位 。
然后它将告诉您是否要将消息发送到该变量的已释放实例。
一旦弄清楚了这一点,我将建议改为:
- (BOOL)isSuccess {
return [self.statusCode intValue] == kApiSuccessCode;
}
As mentioned by others, #define doesn't have a type associated with it
=> kApiSuccessCode不是整数,在编译程序之前,预编译器只需将其替换为0
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.