如何使用静态变量在objective-c中保存字符串?

时间:2014-10-08 09:20:20

标签: ios objective-c static

我想使用Static Var来保存NSString。 所以我在.h文件中定义了一个静态Var,如下所示:

#ifndef GlobalParameters_h
#define GlobalParameters_h

//access token
static NSString *applicationToken;

#endif

在A类中,我改变了静态var,如下所示:

#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 个答案:

答案 0 :(得分: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;

P.S。我希望您使用ARC,因为如果没有,那么applicationToken = [token copy];将导致内存泄漏。

答案 1 :(得分: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];