2013-06-06 52 views
7

在C#中声明如下静态变量:ios - 如何声明静态变量?

private const string Host = "http://80dfgf7c22634nbbfb82339d46.cloudapp.net/"; 
private const string ServiceEndPoint = "DownloadService.svc/"; 
private const string ServiceBaseUrl = Host + ServiceEndPoint; 
public static readonly string RegisteredCourse = ServiceBaseUrl + "RegisteredCourses"; 
public static readonly string AvailableCourses = ServiceBaseUrl + "Courses"; 
public static readonly string Register = ServiceBaseUrl + "Register?course={0}"; 

如何调用另一类这个静态变量?

+1

由于“静态变量”在Objective-C中不是一个明确定义的术语,而且不同的含义经常被混淆,所以不清楚你在这里问什么。你想通过类接口访问类变量吗?还是关于静态存储时间? –

+0

在这里,我认为“静态变量”在Objective-C中的定义非常明确,与C中的含义完全相同。 – gnasher729

回答

11

答案:使用static关键字。

语法:static ClassName *const variableName = nil;(更新[补充const]按照注释通过Abizern


原因更新(按照评论由 “直到”): 当在一个函数/方法中的变量上使用时,即使在该变量的作用域被保留时,也会保留其状态。当在任何函数/方法之外使用时,它将使该变量对其他源文件不可见 - 只有在任何函数/方法外部使用时,该变量才会在该实现文件中可见。 因此conststatic有助于编译器相应地优化它。

如果您需要使用conststatic的更多解释,我在这里找到了一个漂亮的链接:const static


用途:

你可能已经看到了你的tableview的委托使用“静态”关键字的- cellForRowAtIndexPath:

static NSString *CellIdentifier = @"reuseStaticIdentifier";

+2

我会写'static NSString * const staticURL = @“something”;' – Abizern

+2

@Abizern :你能解释一下'const'背后的原因吗? – Bhavin

+2

@Vin该变量在运行时永远不会改变,因此const可以帮助编译器相应地优化它。 – Till

2

目标C是超级组C/C++,所以对于静态它遵循C++/C约定,您应该可以使用它

static <<datatype>> <<variableName>> = initialization 

希望你已经尝试过这种方式,你有任何错误,如果是的话,请在你的问题

如果与NSString使用这就是情况下增加更多的清晰度,

static NSString *pString = @"InitialValue"; 

和如果您必须修改代码中的NSString,请确保它必须是NSMutableString

希望这是帮助...

+0

如果它的一个静态为什么要修改它? – Abizern

+0

你必须解释更多关于这个:修改字符串。因为这也是有效的:'myString = [NSString stringWithFormat:@“Add string%@”,myString]'; – pbibergal

+1

Objective-C是C的一个超集,没有涉及C++,实际上'static'的语义在C和C++。 –

5
static NSString *aString = @""; // Editable from within .m file 
NSString * const kAddressKey = @"address"; // Constant, visible within .m file 

// in header file 
extern NSString * const kAddressKey; // Public constant. Use this for e.g. dictionary keys. 

据我所知,公共静不是一个内置的Objective-C的功能。您可以解决此通过使返回静态变量一个公共类方法:

//.h 
+ (NSString *)stringVariable; 

//.m 
static NSString * aString; 
+ (NSString *)stringVariable 
{ 
    return aString; 
} 

大多数静态物体不能在编译时初始化(我认为只有真正的字符串)。如果您需要初始化它们,您可以在+ (void)initialize方法中这样做,只要该类第一次被引用,该方法就会被懒惰地调用。

static UIFont *globalFont; 
+ (void)initialize 
{ 
    // Prevent duplicate initialize http://www.mikeash.com/pyblog/friday-qa-2009-05-22-objective-c-class-loading-and-initialization.html 
    if (self == [ClassName class]) { 
     globalFont = [UIFont systemFontOfSize:12]; 
    } 
}