为什么要写这篇文章呢?源于初学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;