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