当前位置:  开发笔记 > IOS > 正文

NSNumber对实例级计数器是否过度杀伤?

如何解决《NSNumber对实例级计数器是否过度杀伤?》经验,为你挑选了2个好方法。

我是Objective-C和Cocoa的新手.我已经读过NSInteger和NSNumber在使用简单整数时是首选,因为它们是原始数字类型的"平台安全"版本(在NSNumber的情况下,包装在一个对象中).所以,我需要一个我的课程中的计数器,当NSTimer激活时它会增加.在Apple论坛上,我发现一群人都向类似情况的人推荐他们应该在标题中声明一个NSNumber指针,用numberWithInt:初始化它,然后每次需要增加它时通过将它分配给一个新的对象(类似的东西counter = [NSNumber numberWithInt:[counter intValue]+1];).这对我来说太过分了.如果我需要的只是一个int计数器(顺便说一句,我会在它达到15后将其重置为0,因此大小不是问题),我不能只使用一个int而不必分配一个每次迭代我的计时器循环的新对象?

如果是这样,我如何在整个班级中提供原始类型.我知道对于对象类型,我在我的界面中声明它并使用@property和@synthesize ...当使用原语时,等价(如果存在)是什么?



1> Gareth Davis..:

使用NSNumber作为一个简单的计数器确实看起来有点过度杀戮.您可以将类成员声明为NSInteger,只需使用++或+ =更新它们

例如:

@interface YourViewController : UIViewController  {
NSInteger counter;      
}

@property (nonatomic,assign) NSInteger counter;

@synthesize只是:

@synthesize counter

并可以通过以下方式递增:

self.counter += 1;

要么

counter ++;

后者将阻止任何观察者被告知,因此可能不是优选的.



2> Abizern..:

NSNumber是数字的对象表示.我在将数字存储在集合类中时使用它,因为它们只能保存对象指针.

所以在你需要一个计数器的例子中,它可能是矫枉过正的.

NSInteger只是一个整数,对于32位和64位程序是安全的,并且Apple建议使用它而不是int.它不是一个对象.这可能是你需要一个计数器(实际上NSUInteger,它是一个unsigned int)可能会更好.

至于在整个班级中提供原语 - 好吧,如果你在标题中将它声明为iVar,那么无论如何它都可以在你的课程中使用.@property并且@synthesize只是Objective-C 2.0声明这些属性的方法,可以在KVC/KVO兼容的方式中看到(并且可能更改)您的类之外的属性.原始类型可被用作使用相同的性质@property@synthesize语法.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有