2014-10-08 37 views
1

我想使用靜態變量來保存一個NSString。 所以我在.h文件中定義一個靜態無功這樣的:如何使用靜態變量在objective-c中保存字符串?

#ifndef GlobalParameters_h 
#define GlobalParameters_h 

//access token 
static NSString *applicationToken; 

#endif 

在A類,我改變靜止無功這樣的:

#import "ClassA.h" 
#import "GlobalParameters.h" 

extern NSString *applicationToken; 

@implementation ClassA 

+ (void)parseResponse:(NSString *)response 
{ 
    NSDictionary *responseDic = [response objectFromJSONString]; 

    NSString *token = [responseDic objectForKey:@"token"]; 

    applicationToken = [token copy]; 

    NSLog(@"%@",applicationToken); 
} 

當調試運行到

applicationToken = [token copy]; 

我發現「applicationToken」爲零,但下一句

NSLog(@"%@",applicationToken); 

可以在控制檯輸出正確的值!而在ClassB中,「applicationToken」也是零。 我不知道爲什麼靜態var是零。我認爲編譯器會在GlobalParameters.h中找到「applicationToken」的定義。但爲什麼我無法修改靜態值?

感謝您的幫助:)

回答

2

static全局變量意味着它自己爲它的使用的每個對象的文件。因此,ClassA和ClassB會有自己的applicationToken。

在GlobalParameters.h:

#ifndef GlobalParameters_h 
#define GlobalParameters_h 

//access token 
extern NSString *applicationToken; 

#endif 

在GlobalRarameters.m:

#import "GlobalParameters.h" 

NSString *applicationToken; 

附註:

要爲你需要這一切對象的文件創建全局變量我希望你使用ARC,因爲如果沒有,那麼applicationToken = [token copy];會導致內存泄漏。

+0

感謝您的幫助。但是,我使用關鍵字「extern」。我記得「extern」可以擴大var的範圍。 – 2014-10-08 09:57:44

+0

@ Tsich'i,好的。使用'extern',只是不要使用'static'。 – 2014-10-08 10:32:17

+0

在GlobalParameters_h中,我將「staic NSString * applicationToken」修改爲「NSString * applicationToken」。然後在ClassA中,可以正確修改「applicationToken」。在MyApp運行過程中,有沒有發佈「applicationToken」的可能性? @ Cy-4AH – 2014-10-08 10:34:09

0
  • 嘿其工作正常,我檢查這樣

    檢查一次你好嗎「responseDic」(或)不,檢查 字典有令牌密鑰

static NSString *applicationToken; 
    applicationToken = @"srinivas"; 
    NSLog(@"%@",applicationToken); 

    NSDictionary *responseDic = [NSDictionary dictionaryWithObject:@"static" forKey:@"token"]; 

    NSString *token = [responseDic objectForKey:@"token"]; 

    applicationToken = [token copy]; 

    NSLog(@"%@",applicationToken); 
     [AppDelegate parseResponse:responseDic]; 
+0

是的,我檢查價值。 「標記」具有正確的值。但是,當我將該值設置爲靜態「applicationToken」時,這是失敗的。 – 2014-10-08 10:01:47

相關問題