gpt4 book ai didi

ios - .h 中的静态常量定义与 .m 中的外部常量

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:43:46 25 4
gpt4 key购买 nike

我发现将 .h 中的常量定义为外部变量,然后在 .m 文件中分配常量是一件令人沮丧的事情。显得那么多余。有什么理由不只在头文件中定义常量吗?

典型的实现是:

//  Constants.h
@interface Constants : NSObject
extern NSString *const kPCFavorites;
@end

那么实现将是:

//  Constants.m
@implementation Constants
NSString *const kPCFavorites = @"PCFavorites";
@end

但是,我可以这样做:

//  Constants.h
static NSString *const kPCFavorites = @"PCFavorites";
@interface Constants : NSObject
@end

显然,最后一个定义甚至不需要接口(interface)或实现,因此两者都可以省略并变成:

//  Constants.h
static NSString *const kPCFavorites = @"PCFavorites";

根本没有 .m 文件。

这对我来说似乎更清晰。为什么我们不以这种方式实现常量?我已经用两种方式定义了它们,并且在 XCode 5 中没有出现编译或运行时错误。

最佳答案

因为

static NSString * const kPCFavorites = @"PCFavorites";

声明一个变量,而不是常量。 C 实际上没有办法声明符号常量(除了 enum,它只适用于整数)。

因此,如果您使用此方法,则每个包含 #include header 的文件都将有自己的名为 kPCFavorites 的变量。从历史上看,这意味着您的程序的大小会因为 kPCFavourites 和字符串 @"PCFavourites" 的所有副本而增加,尽管更现代的链接器可能设法做到摆脱部分或全部重复(当然,我希望链接器只给您留下字符串本身的一个副本;我不确定它目前是否可以摆脱额外的指针变量——但它是易于测试)。

关于ios - .h 中的静态常量定义与 .m 中的外部常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22230383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com