【问题标题】:Is there an issue to use int for class property?将 int 用于类属性有问题吗?
【发布时间】:2009-05-18 15:42:39
【问题描述】:

当我开始使用 Cocoa 时,我记得我在某处读到过 int/float 和类似的东西不应该用于类属性并使用 NS* 等效项(如 NSInteger)。

这里是否存在真正隐藏的问题,为什么它会更好,或者这只是我读到它的人的自愿编码规则(我终生无法找到它在哪里)?

那么,什么更好:

@interface xx... 
    int myProp;
@end

@interface xx... 
    NSInteger *myProp;
@end

【问题讨论】:

  • 问得好亚历山大。这个较早的 StackOverflow 问题/答案可能是您正在寻找的:stackoverflow.com/questions/13725/…
  • 只是为了明确 Chuck 的以下观点:您的 int 示例的 NSInteger 版本是“NSInteger myProp”,不是“NSInteger *myProp”。
  • 哎呀,谢谢 smorgan。我有点养成了在以 NS O 开头的任何内容之后添加 * 的习惯:)

标签: objective-c class


【解决方案1】:

int 版本很好,但首选 NSInteger。 NSInteger 不是一个对象,也不必用指针引用——它只是一个 typedef,它允许变量在 32 位和 64 位计算机上都是本机字长。所以最好的选择是:

@interface SomeClass : NSObject {
    NSInteger aNumber;
@end

@implementation SomeClass
- (id)init {
    [super init];
    number = 42;
}
@end

【讨论】:

  • 所以它基本上是防止推入 int 大小的安全措施?那么使用 int 没有任何问题,如果我确定它会是一个小的最大数(比如 1000)。
  • 这不是针对任何事情的保护措施。它只是有助于使您的应用程序架构独立。通常没有充分的理由在 NSInteger 上使用 int —— 你什么也得不到。如果你想指定一个小的数字从而节省空间,你应该使用一个小的类型,比如 uint_16 或 uint_8。
  • 谢谢查克,非常感谢。
【解决方案2】:

看到这个question。 NSInteger 是架构安全的,建议从 10.5 开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 2011-03-26
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多