[iOS]NSInteger int long区别

本文探讨了在iOS开发中,NSInteger、int、long、NSUInteger、NSNumber以及CGFloat、float、double之间的区别。特别指出,当从JSON转模型时,错误地使用NSUInteger可能导致数值异常。在Apple的API中,NSInteger常用于函数返回值,而NSUInteger是无符号整型。另外,当需要将这些基础类型放入NSArray时,需要转换为NSNumber对象。
摘要由CSDN通过智能技术生成

为什么要写这篇文章呢?源于初学iOS开发中遇到的一个蛋疼的bug,在网络请求json后转model时,对其中照片宽高进行赋值时错误的使用了NSUInteger进行强转,导致复制后的图片size为负数,表现在UI上就是所有图片都为默认大小而不是真实大小…不过这也提醒大家编程时要考虑到极端情况起码有个默认值兜底😄

NSInteger、int、long

NSInteger定义的头文件:

#if __LP64__ || 0 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif

从NSInteger定义可以看出如果是64位系统下运行,NSInteger代表long;若为32位系统就是int

什么时候要用NSInteger呢?在Apple的文档中大多数NSInteger出现在函数的返回值上,因此这种API通常就不能使用int

NSUInteger、NSInteger、NSNumber

NSUInteger是无符号数

NSInteger是有符号的

NSUInteger、NSInteger都是基础类型不能放入NSArray,NSNumber是对象类型,前两者则可以通过NSNumber的类方法转换为后者。

  • (NSNumber *) numberWithChar: (char) value;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值