为什么我看到的所有示例中常量都以k开头?我应该在头文件还是.m文件中使用#define定义常量?
我是Objective-C的新手,也不懂C语言。有没有一些针对这种情况的教程可以解释这些内容呢?
为什么我看到的所有示例中常量都以k开头?我应该在头文件还是.m文件中使用#define定义常量?
我是Objective-C的新手,也不懂C语言。有没有一些针对这种情况的教程可以解释这些内容呢?
#define
基本上是一种搜索和替换操作;因此,如果你使用 #define MYCONST @"My Constant"
,那么每次使用 MYCONST
时都会分配一个字符串。但如果你使用 extern NSString * const MYCONST = @"My Constant";
,则该字符串只会被分配一次,并且所有对 MYCONST
的使用都指向同一个字符串。对于其他使用 #define
定义的数据类型(例如 #define MYCONST 4.0
),这些区别并不重要。 - mipadi这个“k”代表什么意思的问题在这个问题中得到了回答。
如果你想让除了那个特定的.m
文件之外的其他文件也使用这些常量,你必须把常量放在头文件中,因为它们无法导入.m
文件。
你可能会对Cocoa Dev Central的Cocoa程序员的C教程感兴趣。它解释了很多核心概念。
k
前缀来自于许多开发者喜欢在他们的代码中使用 匈牙利命名法 的时代。在匈牙利命名法中,每个变量都有一个前缀,告诉你它是什么类型。 pSize
将是一个名为 "size" 的指针,而 iSize
将是一个名为 "size" 的整数。只看变量名,你就知道它的类型。这在没有现代 IDE 可以随时显示任何变量类型的情况下非常有用,否则你总是需要搜索声明才能知道它。追随当时的潮流,Apple 想要为所有常量设置一个共同的前缀。c
呢?因为在匈牙利表示法中,c
已经被使用了,c
代表“计数器”(cApple
表示“苹果的数量”)。同样的问题也出现在class
上,因为它是许多语言中的关键字,那么你如何命名指向类的变量呢?你会发现有大量的代码将该变量命名为klass
,因此选择了k
,k
表示“konstant”。在许多语言中,这个单词实际上以k开头,请看这里。#define
来定义常量,因为#define
是无类型的。const int x = 10; // Type is int
const short y = 20; // Type is short
const uint64_t z = 30; // Type is for sure UInt64
const double d = 5000; // Type is for sure double
const char * str = "Hello"; // Type is for sure char *
#define FOO 90
"k"代表“konvention”,这只是一种惯例。
您可以在任何地方放置#define,可以放在头文件中,在.m文件的顶部或在使用它的.m文件旁边。只需将其放置在使用它的任何代码之前即可。
Xcode工具套件提供的“Objective-C入门”文档实际上非常好。多读几遍(我喜欢每2到5年重新阅读一次)。
然而,无论是它还是我所知道的任何C书籍都无法回答这些特定问题。答案通过经验变得明显。