int 和 NSInteger 有什么区别?
我们可以使用 int 和
NSInteger
可以互换吗?是否有任何特定情况只使用 NSInteger
而不是使用 int
?
Possible Duplicates:
When to use NSInteger vs int?
Why is there is an NSInteger?
Can we use int
and NSInteger
interchangably? Is there any specific situation to use NSInteger
only, instead of using int
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我会说使用标准 C99 uintptr_t 作为指针大小的整数。 NSInteger 的定义看起来很模糊,无法确定它是否保证保存一个指针。
如果必须的话,请在 API 使用 NSInteger 的地方使用 NSInteger。但对于所有实际目的来说,长期就足够了。
看看 NSObjCRunTime,我并没有真正理解其当前定义的动机。可能有一个足够大的整数类型,例如可以达到 NSArray 中的最大项目数?
I would say use standard C99 uintptr_t for pointer sized integers. The definition of NSInteger looks sufficiently cloudy not to be sure it is guaranteed to hold a pointer.
Use NSInteger where the API uses it, if you must. But long will do for all practical purposes.
Looking at NSObjCRunTime, I don't really get the motivation for its current definition. Probably to have an integer type large enough to go up to, for instance, the maximum number of items in an NSArray?
不会。在 Apple 使用的 LP64 架构上,对于现代 OS X Cocoa,NSInteger 是 64 位宽。这意味着,如果将 NSInteger 转换为 int,则会与 NSNotFound 可能会失败。这是一个例子:
在我看来,你应该只在需要将参数传递给 Cocoa 或从 Cocoa 接收结果并且文档说数据类型为 NSInteger 的情况下使用 NSInteger >。在所有其他情况下:
int
或long
。stdint.h
类型,例如int32_t
、int64_t
。intptr_t
或uintptr_t
No. On the LP64 architecture used by Apple, for modern OS X Cocoa, NSInteger is 64 bits wide. This means that if you cast an NSInteger to an int, comparisons against NSNotFound may fail. Here's an example:
In my opinion, you should only use
NSInteger
where you need to pass a parameter to Cocoa or receive a result from Cocoa and the documentation says the data type isNSInteger
. In all other cases:int
orlong
.stdint.h
types e.g.int32_t
,int64_t
.intptr_t
oruintptr_t