我新的Objective-C和可可。我读过NSInteger的和NSNumber的简单整数工作时是首选,因为他们是原始的数字类型的“平台安全”的版本(和的NSNumber的情况下,包裹在一个对象)。所以,我需要在我的课的计数器被递增一个NSTimer火灾时。在苹果论坛上,我发现了一批人都推荐的人在类似情况下,他们应该在标题中声明的NSNumber指针,与numberWithInt :,初始化,然后每次需要递增时将其分配到这样做一个新的对象(像counter = [NSNumber numberWithInt:[counter intValue]+1];)。这看起来像矫枉过正我。如果我需要的是一个int计数器,只使用一个int,而不必分配(顺便说一句和,我重新回至0它击中后15所以大小不是问题),我不能闪避与我的计时器的循环的每次迭代的新对象?

如果是这样,我怎么做提供整个班里一个基本类型。我知道,与对象类型,我宣布它在我的界面,并使用@property和@synthesize ......有什么当量(如果存在的话)与原语工作时?

有帮助吗?

解决方案

使用的NSNumber一个简单的计数器看起来有一点点超必杀。可以声明类的成员如NSInteger的和简单地使用++更新它们或+ =

例如:

@interface YourViewController : UIViewController  {
NSInteger counter;      
}

@property (nonatomic,assign) NSInteger counter;

在@synthesize只是:

@synthesize counter

和可以通过递增或者:

self.counter += 1;

counter ++;

稍后将防止任何观察员被告知,从而可能不是优选的。

其他提示

的NSNumber是一个数字的对象表示。我用它在一个集合类存储号码时,因为它们只能容纳对象的指针。

所以,在你的榜样,这需要一个计数器,它可能是矫枉过正。

NSInteger的仅仅是一个通过typedef为32次和64位的方案是安全的整数,并且是由苹果推荐使用而非int。这是不是一个对象。这可能是你需要一个计数器(实际上NSUInteger,这是一个unsigned int)什么可能是更好的。

至于整个班制作提供原语 - 好了,如果你在标题为伊娃宣布,它是整个班级可用反正。 @property@synthesize只是Objective-C的声明这些作为可以看出(或许改变)你在KVC / KVO兼容方式类的外部特性的2.0方式。原始类型可被用作使用相同@property@synthesize句法属性。

我用NSInteger(未INT,更便携式),并将其包装到一个NSNumber如果我需要(节省退出该应用程序的状态,当诸如NSMutableDictionary)将其添加到集合。

我同意你的本能,使用对象为一个简单的计数器听起来有点小题大做,将增加的消息调度呼叫不必要的数量仅仅增加计数器。对于不需要被存储在集合中或操纵为对象的计数器,坚持使用C标量类型。

要声明一个标量作为类的一个实例变量,只需声明它在头文件:

@interface MyClass: NSObject{
  int counter;
}

@end

如果您的的需要增加一个NSNumber(如用于NSManagedObject属性),我发现这一类帮助:

@interface NSNumber (Incrementer)
- (NSNumber *)increment;
@end

@implementation NSNumber (Incrementer)
- (NSNumber *)increment {
    return [NSNumber numberWithInt:[self intValue]+1];
}
@end

所以可以简化增量语句:

counter = [counter increment];
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top