Objective c Cocoa中的*常量/静态变量是否有任何有用的命名约定?

Objective c Cocoa中的*常量/静态变量是否有任何有用的命名约定?,objective-c,cocoa,coding-style,Objective C,Cocoa,Coding Style,我知道常量是以k前缀开头的,但是否有人有自己的常量前缀,这样他们就可以轻松地完成常量,而不是苹果的 由于我的公司名,我的类使用了三个字母的前缀,让我们假设它是OMG。我尝试用omgkConstantName作为常量的前缀,但这并不令人满意。我也在玩kk或ok(o来自OMG)或者我应该玩kOMGConstantName,这看起来更像可可豆 快速获取自己的常量似乎非常有用,就像您可能希望获取自己的类一样。有人这样做吗?这是糟糕的可可风格吗 另外,对于只在一个类中使用的静态变量,比如JSON字典的键,

我知道常量是以
k
前缀开头的,但是否有人有自己的常量前缀,这样他们就可以轻松地完成常量,而不是苹果的

由于我的公司名,我的类使用了三个字母的前缀,让我们假设它是
OMG
。我尝试用
omgkConstantName
作为常量的前缀,但这并不令人满意。我也在玩
kk
ok
(o来自OMG)或者我应该玩kOMGConstantName,这看起来更像可可豆

快速获取自己的常量似乎非常有用,就像您可能希望获取自己的类一样。有人这样做吗?这是糟糕的可可风格吗

另外,对于只在一个类中使用的静态变量,比如JSON字典的键,是否有一个好的命名约定?他们应该有
k
?它们应该以大写字母开头,还是遵循正常的大小写惯例

// Static Variables
static NSString *searchTextKey = @"searchText";
static NSString *searchResultsKey = @"searchResults";
(more)

我通常用帕斯卡的例子

如果您选择遵循“名称空间约定”,即在所有内容上都添加前缀,那么您也会使用前缀

所以我通常会这么做

static NSString *SearchTextKey = @"searchText";
您可以选择将其命名为名称空间(假设前缀为ZK)

一般来说,我只命名在多个项目中使用的东西,遵循google的建议(或者至少在我确定命名约定时是这样)


但最重要的是,无论你选择什么惯例。坚持并保持一致(至少在给定的项目中)。在某一点上,事后诸葛亮只是在浪费时间

我尝试一致使用
kJAFoo
(或
kXXFoo
,其中XX是项目前缀)作为我的公共常量,尤其是导出符号的实际
常量,但通常使用
kFoo
作为枚举或实现文件中的
静态常量。类似地,我对静态变量使用
sFoo
,在使用导出全局变量的罕见情况下使用
gjafo


但是,这些情况都不如命名空间类(以及导入类的类别中的方法)重要,因为大多数类型的冲突将在编译或链接时而不是运行时出现。

我通常遵循与类相同的前缀/大写约定,因此,在Cocoa有
NSTouchPhaseBegan
的地方,我可能有
GLTuneNameKey

苹果建议对枚举使用与函数相同的命名约定。遵循此建议,OMGConstantName是正确的。

绝对同意一致性。我刚刚开始一个新的多Xcode项目,有机会设置样式约定。我想我倾向于使用
kOMG
作为前缀。我喜欢能够区分常量和类。这或多或少就是我如何做到的。不过这是主观的。哦,听起来很清楚,很有逻辑。k表示常量,g表示外部,s表示静态。带有2个或3个字母代码的外部连接。苹果甚至说你应该在外部链接变量(g和k)中使用整个类名,而不仅仅是字母代码?仅添加*k,然后添加Pascal大小写
kPoints
@Godric,在
const
extern
中的
g
中可以找到
k
?@IulianOnofrei k和g作为前缀在许多框架中使用(几乎只有旧的框架使用g),苹果确实使用了k作为前缀本身(一些API确实有,但我认为新的API不会得到它们)。谷歌的指导方针确实鼓励你使用前缀。但我认为编码准则已经从前缀转移了。GitHub上的第三方框架到处使用它们。全局变量是危险的,许多人说你根本不应该使用它们,所以你不会真正看到g前缀,因为没有。Extern const几乎总是以k作为前缀。
static NSString *ZKSearchTextKey = @"searchText";