ios - 何时使用 NSInteger 与 int

在为 iOS 开发时,我应该什么时候使用 NSInteger 与 int?我在 Apple 示例代码中看到他们在将值作为参数传递给函数或从函数返回值时使用 NSInteger(或 NSUInteger)。

- (NSInteger)someFunc;...
- (void)someFuncWithInt:(NSInteger)value;...

但在一个函数中,他们只是使用 int 来跟踪一个值

for (int i; i < something; i++)
...

int something;
something += somethingElseThatsAnInt;
...

我已经阅读(被告知)NSInteger 是在 64 位或 32 位环境中引用整数的安全方法,所以为什么要使用 int有吗?

最佳答案

当您不知道您的代码可能在哪种处理器架构上运行时,您通常希望使用 NSInteger,因此您可能出于某种原因需要最大可能的整数类型,即 32 位systems 只是一个 int,而在 64 位系统上它是一个 long

除非您特别需要,否则我会坚持使用 NSInteger 而不是 int/long

NSInteger/NSUInteger 被定义为这些类型之一的 *dynamic typedef*s,它们的定义如下:

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif

关于您应该为每种类型使用的正确格式说明符,请参阅 String Programming Guide's section on Platform Dependencies

https://stackoverflow.com/questions/4445173/

相关文章:

objective-c - 使用 alloc init 而不是 new

ios - 将 NSURL 转换为 NSString

ios - 如何在 Swift 中发出 HTTP 请求?

objective-c - 我的 Objective-C 单例应该是什么样的?

objective-c - NSString 属性 : copy or retain?

objective-c - 对 Objective-C 代码进行单元测试的最佳方法是什么?

iphone - 找不到 -lPods 的库

ios - dequeueReusableCellWithIdentifier :forIndexP

ios - 在 Xcode 6 中使用 AutoLayout 约束模拟方面适合行为

objective-c - 在不使用私有(private) API 的情况下获取当前的第一响应者