繁体   English   中英

比较NSNumber值和定义的int

[英]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值的不好方法吗? 谢谢

解决了:

原来我犯了一个基本错误,尝试将NSLogBOOL值,即NSLog(@"Does this work? %@", [response isSuccess]) 因此,代码本身可以正常工作-但感谢大家为您提供提高效率的建议!

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

有充分的理由将值存储在NSNumber实例中,但是在大多数情况下,这是过大了。 如果确实有一个NSNumber实例,则只需使用intValue即可获取它的整数值并将其与原始值进行比较,而无需创建一个全新的实例。

如果您查看Foundation类,则大多数时候都会看到它们,它们依赖于NSInteger基本类型而不是NSNumber实例。 例如, NSURLResponse类使用NSInteger返回HTTP状态代码。

在指示我将使僵尸这个职位

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

一旦弄清楚了这一点,我将建议改为:

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

#define与常量的优缺点?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM