【发布时间】:2013-02-16 18:55:47
【问题描述】:
我知道在头文件中的变量声明之前放置单词extern 声明了全局静态变量的存在而不初始化它。我也明白,如果我导入包含 extern 变量的文件,我可以在没有类/文件名的情况下引用它们。但是在哪里定义它们和它们的价值呢?
我想要做的是创建一个带有全局常量的常量类,我想在整个 iOS 应用程序的代码中使用它。
有人把它们放在这样的界面中吗?
Example.h
#import <Foundation/Foundation.h>
@interface Constraints : NSObject
{
extern NSString * const PREFS_NAME;
}
或者像这样放在界面之外
Example.h
#import <Foundation/Foundation.h>
extern NSString * const PREFS_NAME;
@interface Constraints : NSObject
{
}
那么在实现 .m 文件中如何初始化外部值?
在这样的执行区域内?
Example.m
#import "Constraints.h"
@implementation Constraints
/**PRefecences name for the application**/
const NSString * PREFS_NAME = @"MyApp_Prefs";
@end
或者像这样在实现区域之外初始化它们:
Example.m
#import "Constraints.h"
/**PRefecences name for the application**/
const NSString * PREFS_NAME = @"MyApp_Prefs";
@implementation Constraints
@end
或者我是否在构造函数中为它们提供初始值?或者前面带有+的任意静态样式方法,即+(void) setAppConstraints;
我尝试了几种组合,但总是遇到错误,例如“使用不同类型重新定义 'xVariable'”。或者关于“外部没有初始化接口”的东西(或者类似的东西,我忘记了)。所以我想知道如何正确声明和初始化它们以形成与Java中public static final变量相同的角色。
还有extern 命令的限制是什么?我知道我可以extern 和NSInteger 或NSString,但是NSArray 呢?
我问这个问题是因为关于在 Objective-C 中使用 extern 的信息似乎有很多误导性或不完整的信息。许多答案似乎是推测性的。我希望这个问题不仅对我来说是一个很好的资源,而且可以限制更多关于extern 基础知识的类似问题。
【问题讨论】:
-
如果你想“创建一个常量类”,这与全局变量无关,因为它们不属于一个类。为此,您需要 ivars。
-
@Josh Cashwell 可能是一个类似的问题。但正如我在问题文本中所说,我在 S/O 上找到的所有答案都不完整,或者留下的问题多于提供的答案。
-
@Josh Caswell 我想创建一个全局可访问的常量值。这并不向我建议 iVars。我想我可以使用单例,但这仍然不能解释如何使用 extern 来实现这一点,如果我错了,它会纠正我是命令的有效用例,也是它设计的用例。
-
你的问题有几个误解,所以我很难相信你已经真的阅读了你说你找到的所有重复项。至于“全局可访问的常量值”,如果这是你想要的,那么你就不要一个类。
标签: objective-c syntax extern variable-declaration