我是Objective-C和Cocoa的新手.我已经读过NSInteger和NSNumber在使用简单整数时是首选,因为它们是原始数字类型的"平台安全"版本(在NSNumber的情况下,包装在一个对象中).所以,我需要一个我的课程中的计数器,当NSTimer激活时它会增加.在Apple论坛上,我发现一群人都向类似情况的人推荐他们应该在标题中声明一个NSNumber指针,用numberWithInt:初始化它,然后每次需要增加它时通过将它分配给一个新的对象(类似的东西counter = [NSNumber numberWithInt:[counter intValue]+1];
).这对我来说太过分了.如果我需要的只是一个int计数器(顺便说一句,我会在它达到15后将其重置为0,因此大小不是问题),我不能只使用一个int而不必分配一个每次迭代我的计时器循环的新对象?
如果是这样,我如何在整个班级中提供原始类型.我知道对于对象类型,我在我的界面中声明它并使用@property和@synthesize ...当使用原语时,等价(如果存在)是什么?
使用NSNumber作为一个简单的计数器确实看起来有点过度杀戮.您可以将类成员声明为NSInteger,只需使用++或+ =更新它们
例如:
@interface YourViewController : UIViewController { NSInteger counter; } @property (nonatomic,assign) NSInteger counter;
@synthesize只是:
@synthesize counter
并可以通过以下方式递增:
self.counter += 1;
要么
counter ++;
后者将阻止任何观察者被告知,因此可能不是优选的.
NSNumber是数字的对象表示.我在将数字存储在集合类中时使用它,因为它们只能保存对象指针.
所以在你需要一个计数器的例子中,它可能是矫枉过正的.
NSInteger只是一个整数,对于32位和64位程序是安全的,并且Apple建议使用它而不是int
.它不是一个对象.这可能是你需要一个计数器(实际上NSUInteger,它是一个unsigned int
)可能会更好.
至于在整个班级中提供原语 - 好吧,如果你在标题中将它声明为iVar,那么无论如何它都可以在你的课程中使用.@property
并且@synthesize
只是Objective-C 2.0声明这些属性的方法,可以在KVC/KVO兼容的方式中看到(并且可能更改)您的类之外的属性.原始类型可被用作使用相同的性质@property
和@synthesize
语法.