2013-06-06 76 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]; 
    } 
}