我看到很多Objective-C代码,它们只是定义它需要的局部常量,然后继续其快乐的方式。问题是,据我所知,#defines没有作用域。其中许多是苹果自己的示例代码。例如,在TableViewSuite例5,在TimeZoneView.m中的drawRect函数包含以下块:Objective-C中局部常量的最佳实践
#define LEFT_COLUMN_OFFSET 10
#define LEFT_COLUMN_WIDTH 130
#define MIDDLE_COLUMN_OFFSET 140
#define MIDDLE_COLUMN_WIDTH 110
#define RIGHT_COLUMN_OFFSET 270
#define UPPER_ROW_TOP 8
#define LOWER_ROW_TOP 34
#define MAIN_FONT_SIZE 18
#define MIN_MAIN_FONT_SIZE 16
#define SECONDARY_FONT_SIZE 12
#define MIN_SECONDARY_FONT_SIZE 10
是有一些原因,我不明白,这不是荒谬的危险吗?至少,我们不应该在函数结束时使用这些常量吗?
这是我的问题,我想:
它是一个更好的做法来定义你需要它在文件中需要什么,并在年底取消定义的呢?或者你认为只使用静态常量来处理这类事情会更好吗?使用静态常量有没有任何性能损失,还是编译器能够像#define一样高效地处理它们?
很酷,谢谢本,我认为那是答案。我确实认为这可能是微不足道的,但是微不足道的事情可以加起来,而其他所有事情都是平等的,我更喜欢养成默认使用高性能约定的习惯。这样,当你遇到一个重要的案例时,你已经习惯了这样做。 – DougW 2010-02-26 22:32:27
字符串常量,即用@“”定义的那些是单态/原子,它们确实说了很多内存和时间。 NSNumbers是相同的方式。在任何给定的过程中,只有一个由[NSNumber numberWithInt:1]生成的实例。 – TechZen 2010-02-26 23:39:04
NSNumber实习一个小的子集,而不是整个整数范围,而恒定的NSStrings将始终被实施 – rpetrich 2010-02-27 01:10:34