NSObject属性的NSNumber与NSInteger与int



我们在iOS中有一个带有id属性的模型。以下是我们目前正在使用的内容(顺便说一下,这是iOS 5)。

 @property (nonatomic, assign) int userID;

到目前为止似乎运行良好。我想知道这是否会给未来带来任何问题。

示例:我理解这意味着ID属性本身不能存储到plist中。但是,这是NSObject的属性。如果我们将任何东西存储到文件/core-data/nuserdefaults/whatever中,那么它可能是整个对象,而不仅仅是这个属性。

我想我的问题是。。。通过将其存储为int而不是NSNumber,我们会给自己带来任何问题吗?

其次,将其存储为NSInteger会有什么不同。我知道它只是对long或int的类型def,具体取决于体系结构。既然我们只针对iPhone,那么它设置为int有关系吗?在这种情况下似乎没有什么区别。

我想我的问题是。。。我们会给自己找麻烦吗将其存储为int而不是NSNumber的问题?

这实际上取决于你将如何使用这个值。如果你想把它当作一个对象(例如,这样你就可以把它存储在NSArray或NSDictionary中),NSNumber可能很方便。如果您只想跟踪该值,并且int适用于您,那么可以使用int

其次,将其存储为NSInteger有什么区别相反我知道它只是long或int的类型def取决于体系结构。既然我们只针对iPhone它只是设置为int有关系吗?

我会选择NSInteger(和NSUInteger)。使用这些类型,您的代码将自动使用适合您编译的体系结构的大小。你可能只针对iOS,但你可能在运行MacOS X的iOS模拟器上运行代码。所以这是两种架构,你不知道iOS未来会发生什么。

我能想到的唯一限制是,如果int=0是有效值,或者int没有值(null)是一个重要的用例。

由于int总是用0初始化,所以您不会遇到可以检查该属性是否不存在的情况。

在您的情况下,假设您想测试user_id是否存在,那么使用像int这样的原始数据类型是不可能的,因为它总是有一个值。

在另一种情况下,0可能是一个有效的值(甚至在你的情况下——在许多流行文化参考中,史蒂夫·乔布斯被开玩笑说是苹果公司的0号员工)。在这种情况下,每次用0初始化int可能是一个不需要的副作用,您将不得不处理它。

在NSObject的子类中使用int作为属性是很正常的。

根据您的平台,NSInteger可以是intlong,但除此之外,使用intNSInteger也没关系,只要值不超过int的限制,就可以互换使用。

最新更新