我看过Cocoa方法返回NSInteger,即使在返回的值总是无符号的情况下。
什么是根本原因?是NSInteger还是int严格限于如果我们要表示负值?
从NSObjCRuntime.h:
#if __LP64__ || (TARGET_OS_EMbedDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_liKE_64typedef long NSInteger;typedef unsigned long NSUInteger;#elsetypedef int NSInteger;typedef unsigned int NSUInteger;#endif解决方法 在处理NSUInteger和NSInteger时,你还应该注意整数转换规则:
以下片段返回0(false),虽然你希望它打印1(true):
NSInteger si = -1;NSUInteger ui = 1;printf("%d\n",si < ui);
原因是[si]变量被隐式转换为unsigned int!
参见CERT’s Secure Coding site关于这些“问题”的深入讨论以及如何解决它们。
总结以上是内存溢出为你收集整理的NSUInteger vs NSInteger,int vs unsigned和类似的情况全部内容,希望文章能够帮你解决NSUInteger vs NSInteger,int vs unsigned和类似的情况所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)